From 954605a804da399317ca62afa2fb9244afa11ebf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 27 Oct 2017 16:55:03 +0200 Subject: Support roles with rights and add moderator role --- shared/models/users/index.ts | 3 ++- shared/models/users/user-create.model.ts | 3 +++ shared/models/users/user-right.enum.ts | 10 +++++++++ shared/models/users/user-role.ts | 36 ++++++++++++++++++++++++++++++++ shared/models/users/user-role.type.ts | 1 - shared/models/users/user-update.model.ts | 3 +++ shared/models/users/user.model.ts | 2 +- 7 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 shared/models/users/user-right.enum.ts create mode 100644 shared/models/users/user-role.ts delete mode 100644 shared/models/users/user-role.type.ts (limited to 'shared/models/users') diff --git a/shared/models/users/index.ts b/shared/models/users/index.ts index efb58c320..a260bd380 100644 --- a/shared/models/users/index.ts +++ b/shared/models/users/index.ts @@ -4,4 +4,5 @@ export * from './user-login.model' export * from './user-refresh-token.model' export * from './user-update.model' export * from './user-update-me.model' -export * from './user-role.type' +export * from './user-right.enum' +export * from './user-role' diff --git a/shared/models/users/user-create.model.ts b/shared/models/users/user-create.model.ts index 49fa2549d..65830f55e 100644 --- a/shared/models/users/user-create.model.ts +++ b/shared/models/users/user-create.model.ts @@ -1,6 +1,9 @@ +import { UserRole } from './user-role' + export interface UserCreate { username: string password: string email: string videoQuota: number + role: UserRole } diff --git a/shared/models/users/user-right.enum.ts b/shared/models/users/user-right.enum.ts new file mode 100644 index 000000000..c8c710450 --- /dev/null +++ b/shared/models/users/user-right.enum.ts @@ -0,0 +1,10 @@ +export enum UserRight { + ALL, + MANAGE_USERS, + MANAGE_PODS, + MANAGE_VIDEO_ABUSES, + MANAGE_REQUEST_SCHEDULERS, + MANAGE_VIDEO_BLACKLIST, + REMOVE_ANY_VIDEO, + REMOVE_ANY_VIDEO_CHANNEL, +} diff --git a/shared/models/users/user-role.ts b/shared/models/users/user-role.ts new file mode 100644 index 000000000..cc32c768d --- /dev/null +++ b/shared/models/users/user-role.ts @@ -0,0 +1,36 @@ +import { UserRight } from './user-right.enum' + +// Keep the order +export enum UserRole { + ADMINISTRATOR = 0, + MODERATOR = 1, + USER = 2 +} + +export const USER_ROLE_LABELS = { + [UserRole.USER]: 'User', + [UserRole.MODERATOR]: 'Moderator', + [UserRole.ADMINISTRATOR]: 'Administrator' +} + +// TODO: use UserRole for key once https://github.com/Microsoft/TypeScript/issues/13042 is fixed +const userRoleRights: { [ id: number ]: UserRight[] } = { + [UserRole.ADMINISTRATOR]: [ + UserRight.ALL + ], + + [UserRole.MODERATOR]: [ + UserRight.MANAGE_VIDEO_BLACKLIST, + UserRight.MANAGE_VIDEO_ABUSES, + UserRight.REMOVE_ANY_VIDEO, + UserRight.REMOVE_ANY_VIDEO_CHANNEL + ], + + [UserRole.USER]: [] +} + +export function hasUserRight (userRole: UserRole, userRight: UserRight) { + const userRights = userRoleRights[userRole] + + return userRights.indexOf(UserRight.ALL) !== -1 || userRights.indexOf(userRight) !== -1 +} diff --git a/shared/models/users/user-role.type.ts b/shared/models/users/user-role.type.ts deleted file mode 100644 index b38c4c8c3..000000000 --- a/shared/models/users/user-role.type.ts +++ /dev/null @@ -1 +0,0 @@ -export type UserRole = 'admin' | 'user' diff --git a/shared/models/users/user-update.model.ts b/shared/models/users/user-update.model.ts index e22166fdc..96b454b7c 100644 --- a/shared/models/users/user-update.model.ts +++ b/shared/models/users/user-update.model.ts @@ -1,4 +1,7 @@ +import { UserRole } from './user-role' + export interface UserUpdate { email?: string videoQuota?: number + role?: UserRole } diff --git a/shared/models/users/user.model.ts b/shared/models/users/user.model.ts index 175e72f28..ee2147590 100644 --- a/shared/models/users/user.model.ts +++ b/shared/models/users/user.model.ts @@ -1,5 +1,5 @@ -import { UserRole } from './user-role.type' import { VideoChannel } from '../videos/video-channel.model' +import { UserRole } from './user-role' export interface User { id: number -- cgit v1.2.3