aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/models/user/user.ts
diff options
context:
space:
mode:
authorChocobozzz <florian.bigard@gmail.com>2017-10-27 16:55:03 +0200
committerChocobozzz <florian.bigard@gmail.com>2017-10-27 16:55:03 +0200
commit954605a804da399317ca62afa2fb9244afa11ebf (patch)
treede6ee69280bfb928bc01c29430e13d5b820e921a /server/models/user/user.ts
parente02573ad67626210ed279bad321ee139094921a1 (diff)
downloadPeerTube-954605a804da399317ca62afa2fb9244afa11ebf.tar.gz
PeerTube-954605a804da399317ca62afa2fb9244afa11ebf.tar.zst
PeerTube-954605a804da399317ca62afa2fb9244afa11ebf.zip
Support roles with rights and add moderator role
Diffstat (limited to 'server/models/user/user.ts')
-rw-r--r--server/models/user/user.ts29
1 files changed, 18 insertions, 11 deletions
diff --git a/server/models/user/user.ts b/server/models/user/user.ts
index 074c9c121..3c625e450 100644
--- a/server/models/user/user.ts
+++ b/server/models/user/user.ts
@@ -1,17 +1,17 @@
1import { values } from 'lodash'
2import * as Sequelize from 'sequelize' 1import * as Sequelize from 'sequelize'
3import * as Promise from 'bluebird' 2import * as Promise from 'bluebird'
4 3
5import { getSort } from '../utils' 4import { getSort } from '../utils'
6import { USER_ROLES } from '../../initializers'
7import { 5import {
8 cryptPassword, 6 cryptPassword,
9 comparePassword, 7 comparePassword,
10 isUserPasswordValid, 8 isUserPasswordValid,
11 isUserUsernameValid, 9 isUserUsernameValid,
12 isUserDisplayNSFWValid, 10 isUserDisplayNSFWValid,
13 isUserVideoQuotaValid 11 isUserVideoQuotaValid,
12 isUserRoleValid
14} from '../../helpers' 13} from '../../helpers'
14import { UserRight, USER_ROLE_LABELS, hasUserRight } from '../../../shared'
15 15
16import { addMethodsToModel } from '../utils' 16import { addMethodsToModel } from '../utils'
17import { 17import {
@@ -23,8 +23,8 @@ import {
23 23
24let User: Sequelize.Model<UserInstance, UserAttributes> 24let User: Sequelize.Model<UserInstance, UserAttributes>
25let isPasswordMatch: UserMethods.IsPasswordMatch 25let isPasswordMatch: UserMethods.IsPasswordMatch
26let hasRight: UserMethods.HasRight
26let toFormattedJSON: UserMethods.ToFormattedJSON 27let toFormattedJSON: UserMethods.ToFormattedJSON
27let isAdmin: UserMethods.IsAdmin
28let countTotal: UserMethods.CountTotal 28let countTotal: UserMethods.CountTotal
29let getByUsername: UserMethods.GetByUsername 29let getByUsername: UserMethods.GetByUsername
30let listForApi: UserMethods.ListForApi 30let listForApi: UserMethods.ListForApi
@@ -76,8 +76,14 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da
76 } 76 }
77 }, 77 },
78 role: { 78 role: {
79 type: DataTypes.ENUM(values(USER_ROLES)), 79 type: DataTypes.INTEGER,
80 allowNull: false 80 allowNull: false,
81 validate: {
82 roleValid: value => {
83 const res = isUserRoleValid(value)
84 if (res === false) throw new Error('Role is not valid.')
85 }
86 }
81 }, 87 },
82 videoQuota: { 88 videoQuota: {
83 type: DataTypes.BIGINT, 89 type: DataTypes.BIGINT,
@@ -120,9 +126,9 @@ export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.Da
120 loadByUsernameOrEmail 126 loadByUsernameOrEmail
121 ] 127 ]
122 const instanceMethods = [ 128 const instanceMethods = [
129 hasRight,
123 isPasswordMatch, 130 isPasswordMatch,
124 toFormattedJSON, 131 toFormattedJSON,
125 isAdmin,
126 isAbleToUploadVideo 132 isAbleToUploadVideo
127 ] 133 ]
128 addMethodsToModel(User, classMethods, instanceMethods) 134 addMethodsToModel(User, classMethods, instanceMethods)
@@ -139,6 +145,10 @@ function beforeCreateOrUpdate (user: UserInstance) {
139 145
140// ------------------------------ METHODS ------------------------------ 146// ------------------------------ METHODS ------------------------------
141 147
148hasRight = function (this: UserInstance, right: UserRight) {
149 return hasUserRight(this.role, right)
150}
151
142isPasswordMatch = function (this: UserInstance, password: string) { 152isPasswordMatch = function (this: UserInstance, password: string) {
143 return comparePassword(password, this.password) 153 return comparePassword(password, this.password)
144} 154}
@@ -150,6 +160,7 @@ toFormattedJSON = function (this: UserInstance) {
150 email: this.email, 160 email: this.email,
151 displayNSFW: this.displayNSFW, 161 displayNSFW: this.displayNSFW,
152 role: this.role, 162 role: this.role,
163 roleLabel: USER_ROLE_LABELS[this.role],
153 videoQuota: this.videoQuota, 164 videoQuota: this.videoQuota,
154 createdAt: this.createdAt, 165 createdAt: this.createdAt,
155 author: { 166 author: {
@@ -174,10 +185,6 @@ toFormattedJSON = function (this: UserInstance) {
174 return json 185 return json
175} 186}
176 187
177isAdmin = function (this: UserInstance) {
178 return this.role === USER_ROLES.ADMIN
179}
180
181isAbleToUploadVideo = function (this: UserInstance, videoFile: Express.Multer.File) { 188isAbleToUploadVideo = function (this: UserInstance, videoFile: Express.Multer.File) {
182 if (this.videoQuota === -1) return Promise.resolve(true) 189 if (this.videoQuota === -1) return Promise.resolve(true)
183 190