From 954605a804da399317ca62afa2fb9244afa11ebf Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 27 Oct 2017 16:55:03 +0200 Subject: [PATCH] Support roles with rights and add moderator role --- client/src/app/+admin/admin-routing.module.ts | 5 +- client/src/app/+admin/admin.module.ts | 4 +- .../src/app/+admin/friends/friends.routes.ts | 6 +++ .../request-schedulers.routes.ts | 6 +++ .../users/user-edit/user-add.component.ts | 8 +++- .../users/user-edit/user-edit.component.html | 13 ++++++ .../app/+admin/users/user-edit/user-edit.ts | 4 +- .../users/user-edit/user-update.component.ts | 14 ++++-- .../users/user-list/user-list.component.html | 2 +- client/src/app/+admin/users/users.routes.ts | 6 +++ .../video-abuses/video-abuses.routes.ts | 9 +++- .../video-blacklist/video-blacklist.routes.ts | 6 +++ client/src/app/core/auth/auth-user.model.ts | 11 +++-- client/src/app/core/auth/auth.service.ts | 8 +--- client/src/app/core/auth/index.ts | 2 +- client/src/app/core/core.module.ts | 6 ++- .../app/core/menu/menu-admin.component.html | 10 ++-- .../src/app/core/menu/menu-admin.component.ts | 27 ++++++++++- client/src/app/core/menu/menu.component.html | 4 +- client/src/app/core/menu/menu.component.ts | 46 ++++++++++++++++++- client/src/app/core/routing/index.ts | 2 + .../{auth => routing}/login-guard.service.ts | 2 +- .../routing/user-right-guard.service.ts} | 11 +++-- .../app/shared/forms/form-validators/user.ts | 6 +++ client/src/app/shared/users/user.model.ts | 8 ++-- .../app/videos/shared/video-details.model.ts | 14 +++--- .../videos/video-list/video-list.component.ts | 2 +- server/controllers/api/pods.ts | 9 ++-- server/controllers/api/request-schedulers.ts | 6 +-- server/controllers/api/users.ts | 20 ++++---- server/controllers/api/videos/abuse.ts | 6 +-- server/controllers/api/videos/blacklist.ts | 10 ++-- server/helpers/custom-validators/users.ts | 11 ++--- server/initializers/constants.ts | 13 +----- server/initializers/installer.ts | 5 +- .../initializers/migrations/0085-user-role.ts | 39 ++++++++++++++++ server/middlewares/admin.ts | 20 -------- server/middlewares/index.ts | 2 +- server/middlewares/user-right.ts | 24 ++++++++++ server/middlewares/validators/users.ts | 5 +- .../middlewares/validators/video-channels.ts | 6 ++- server/middlewares/validators/videos.ts | 3 +- server/models/user/user-interface.ts | 9 ++-- server/models/user/user.ts | 29 +++++++----- 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 +- 51 files changed, 378 insertions(+), 139 deletions(-) rename client/src/app/core/{auth => routing}/login-guard.service.ts (92%) rename client/src/app/{+admin/admin-guard.service.ts => core/routing/user-right-guard.service.ts} (66%) create mode 100644 server/initializers/migrations/0085-user-role.ts delete mode 100644 server/middlewares/admin.ts create mode 100644 server/middlewares/user-right.ts 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 diff --git a/client/src/app/+admin/admin-routing.module.ts b/client/src/app/+admin/admin-routing.module.ts index c3e4895ac..7262768fe 100644 --- a/client/src/app/+admin/admin-routing.module.ts +++ b/client/src/app/+admin/admin-routing.module.ts @@ -8,15 +8,14 @@ import { FriendsRoutes } from './friends' import { RequestSchedulersRoutes } from './request-schedulers' import { UsersRoutes } from './users' import { VideoAbusesRoutes } from './video-abuses' -import { AdminGuard } from './admin-guard.service' import { VideoBlacklistRoutes } from './video-blacklist' const adminRoutes: Routes = [ { path: '', component: AdminComponent, - canActivate: [ MetaGuard, AdminGuard ], - canActivateChild: [ MetaGuard, AdminGuard ], + canActivate: [ MetaGuard ], + canActivateChild: [ MetaGuard ], children: [ { path: '', diff --git a/client/src/app/+admin/admin.module.ts b/client/src/app/+admin/admin.module.ts index f29c501b0..6c216e5d8 100644 --- a/client/src/app/+admin/admin.module.ts +++ b/client/src/app/+admin/admin.module.ts @@ -8,7 +8,6 @@ import { UsersComponent, UserAddComponent, UserUpdateComponent, UserListComponen import { VideoAbusesComponent, VideoAbuseListComponent } from './video-abuses' import { VideoBlacklistComponent, VideoBlacklistListComponent } from './video-blacklist' import { SharedModule } from '../shared' -import { AdminGuard } from './admin-guard.service' @NgModule({ imports: [ @@ -45,8 +44,7 @@ import { AdminGuard } from './admin-guard.service' providers: [ FriendService, RequestSchedulersService, - UserService, - AdminGuard + UserService ] }) export class AdminModule { } diff --git a/client/src/app/+admin/friends/friends.routes.ts b/client/src/app/+admin/friends/friends.routes.ts index 615b6f4f7..61cfcae19 100644 --- a/client/src/app/+admin/friends/friends.routes.ts +++ b/client/src/app/+admin/friends/friends.routes.ts @@ -1,13 +1,19 @@ import { Routes } from '@angular/router' +import { UserRightGuard } from '../../core' import { FriendsComponent } from './friends.component' import { FriendAddComponent } from './friend-add' import { FriendListComponent } from './friend-list' +import { UserRight } from '../../../../../shared' export const FriendsRoutes: Routes = [ { path: 'friends', component: FriendsComponent, + canActivate: [ UserRightGuard ], + data: { + userRight: UserRight.MANAGE_PODS + }, children: [ { path: '', diff --git a/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts b/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts index 4961c646b..c2564de15 100644 --- a/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts +++ b/client/src/app/+admin/request-schedulers/request-schedulers.routes.ts @@ -1,5 +1,7 @@ import { Routes } from '@angular/router' +import { UserRightGuard } from '../../core' +import { UserRight } from '../../../../../shared' import { RequestSchedulersComponent } from './request-schedulers.component' import { RequestSchedulersStatsComponent } from './request-schedulers-stats' @@ -7,6 +9,10 @@ export const RequestSchedulersRoutes: Routes = [ { path: 'requests', component: RequestSchedulersComponent, + canActivate: [ UserRightGuard ], + data: { + userRight: UserRight.MANAGE_REQUEST_SCHEDULERS + }, children: [ { path: '', diff --git a/client/src/app/+admin/users/user-edit/user-add.component.ts b/client/src/app/+admin/users/user-edit/user-add.component.ts index 6d8151b42..8e3e3d53d 100644 --- a/client/src/app/+admin/users/user-edit/user-add.component.ts +++ b/client/src/app/+admin/users/user-edit/user-add.component.ts @@ -9,10 +9,11 @@ import { USER_USERNAME, USER_EMAIL, USER_PASSWORD, - USER_VIDEO_QUOTA + USER_VIDEO_QUOTA, + USER_ROLE } from '../../../shared' import { ServerService } from '../../../core' -import { UserCreate } from '../../../../../../shared' +import { UserCreate, UserRole } from '../../../../../../shared' import { UserEdit } from './user-edit' @Component({ @@ -28,12 +29,14 @@ export class UserAddComponent extends UserEdit implements OnInit { 'username': '', 'email': '', 'password': '', + 'role': '', 'videoQuota': '' } validationMessages = { 'username': USER_USERNAME.MESSAGES, 'email': USER_EMAIL.MESSAGES, 'password': USER_PASSWORD.MESSAGES, + 'role': USER_ROLE.MESSAGES, 'videoQuota': USER_VIDEO_QUOTA.MESSAGES } @@ -52,6 +55,7 @@ export class UserAddComponent extends UserEdit implements OnInit { username: [ '', USER_USERNAME.VALIDATORS ], email: [ '', USER_EMAIL.VALIDATORS ], password: [ '', USER_PASSWORD.VALIDATORS ], + role: [ UserRole.USER, USER_ROLE.VALIDATORS ], videoQuota: [ '-1', USER_VIDEO_QUOTA.VALIDATORS ] }) diff --git a/client/src/app/+admin/users/user-edit/user-edit.component.html b/client/src/app/+admin/users/user-edit/user-edit.component.html index 6988071ce..349be13c1 100644 --- a/client/src/app/+admin/users/user-edit/user-edit.component.html +++ b/client/src/app/+admin/users/user-edit/user-edit.component.html @@ -40,6 +40,19 @@ +
+ + + +
+ {{ formErrors.role }} +
+
+