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 --- client/src/app/+admin/admin-guard.service.ts | 30 -------------- client/src/app/+admin/admin-routing.module.ts | 5 +-- client/src/app/+admin/admin.module.ts | 4 +- client/src/app/+admin/friends/friends.routes.ts | 6 +++ .../request-schedulers.routes.ts | 6 +++ .../+admin/users/user-edit/user-add.component.ts | 8 +++- .../users/user-edit/user-edit.component.html | 13 ++++++ client/src/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 +++ .../app/+admin/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/auth/login-guard.service.ts | 30 -------------- client/src/app/core/core.module.ts | 6 ++- client/src/app/core/menu/menu-admin.component.html | 10 ++--- client/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 + client/src/app/core/routing/login-guard.service.ts | 30 ++++++++++++++ .../app/core/routing/user-right-guard.service.ts | 35 ++++++++++++++++ .../src/app/shared/forms/form-validators/user.ts | 6 +++ client/src/app/shared/users/user.model.ts | 8 ++-- .../src/app/videos/shared/video-details.model.ts | 14 ++++--- .../app/videos/video-list/video-list.component.ts | 2 +- 29 files changed, 246 insertions(+), 108 deletions(-) delete mode 100644 client/src/app/+admin/admin-guard.service.ts delete mode 100644 client/src/app/core/auth/login-guard.service.ts create mode 100644 client/src/app/core/routing/login-guard.service.ts create mode 100644 client/src/app/core/routing/user-right-guard.service.ts (limited to 'client') diff --git a/client/src/app/+admin/admin-guard.service.ts b/client/src/app/+admin/admin-guard.service.ts deleted file mode 100644 index 429dc032d..000000000 --- a/client/src/app/+admin/admin-guard.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Injectable } from '@angular/core' -import { - ActivatedRouteSnapshot, - CanActivateChild, - RouterStateSnapshot, - CanActivate, - Router -} from '@angular/router' - -import { AuthService } from '../core' - -@Injectable() -export class AdminGuard implements CanActivate, CanActivateChild { - - constructor ( - private router: Router, - private auth: AuthService - ) {} - - canActivate (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - if (this.auth.isAdmin() === true) return true - - this.router.navigate([ '/login' ]) - return false - } - - canActivateChild (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - return this.canActivate(route, state) - } -} 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 }} +
+
+