X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fapp%2Fcore%2Fmenu%2Fmenu.component.ts;h=872d29819bbbf343b889f6fdc897a5b85b7b7e65;hb=21e0727a84734cb0c81c1c9bb22a49b13e46fe5f;hp=f1bf6966d63a37a79db5f83dfa9f696d46d3c246;hpb=50b0c262fd446e9f57630aa5775e1b4708bdf4cb;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/app/core/menu/menu.component.ts b/client/src/app/core/menu/menu.component.ts index f1bf6966d..872d29819 100644 --- a/client/src/app/core/menu/menu.component.ts +++ b/client/src/app/core/menu/menu.component.ts @@ -1,46 +1,92 @@ -import { Component, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; +import { Component, OnInit } from '@angular/core' +import { Router } from '@angular/router' -import { AuthService } from '../auth'; -import { AuthStatus } from '../../shared'; +import { AuthService, AuthStatus } from '../auth' +import { ServerService } from '../server' +import { UserRight } from '../../../../../shared/models/users/user-right.enum' @Component({ selector: 'my-menu', - templateUrl: './menu.component.html' + templateUrl: './menu.component.html', + styleUrls: [ './menu.component.scss' ] }) export class MenuComponent implements OnInit { - isLoggedIn: boolean; + isLoggedIn: boolean + userHasAdminAccess = false + + private routesPerRight = { + [UserRight.MANAGE_USERS]: '/admin/users', + [UserRight.MANAGE_APPLICATION_FOLLOW]: '/admin/friends', + [UserRight.MANAGE_VIDEO_ABUSES]: '/admin/video-abuses', + [UserRight.MANAGE_VIDEO_BLACKLIST]: '/admin/video-blacklist' + } constructor ( private authService: AuthService, + private serverService: ServerService, private router: Router ) {} - ngOnInit() { - this.isLoggedIn = this.authService.isLoggedIn(); + ngOnInit () { + this.isLoggedIn = this.authService.isLoggedIn() + this.computeIsUserHasAdminAccess() this.authService.loginChangedSource.subscribe( status => { if (status === AuthStatus.LoggedIn) { - this.isLoggedIn = true; - console.log('Logged in.'); + this.isLoggedIn = true + this.computeIsUserHasAdminAccess() + console.log('Logged in.') } else if (status === AuthStatus.LoggedOut) { - this.isLoggedIn = false; - console.log('Logged out.'); + this.isLoggedIn = false + this.computeIsUserHasAdminAccess() + console.log('Logged out.') } else { - console.error('Unknown auth status: ' + status); + console.error('Unknown auth status: ' + status) } } - ); + ) + } + + isRegistrationAllowed () { + return this.serverService.getConfig().signup.allowed + } + + getFirstAdminRightAvailable () { + const user = this.authService.getUser() + if (!user) return undefined + + const adminRights = [ + UserRight.MANAGE_USERS, + UserRight.MANAGE_APPLICATION_FOLLOW, + UserRight.MANAGE_VIDEO_ABUSES, + UserRight.MANAGE_VIDEO_BLACKLIST + ] + + for (const adminRight of adminRights) { + if (user.hasRight(adminRight)) { + return adminRight + } + } + + return undefined } - isUserAdmin() { - return this.authService.isAdmin(); + getFirstAdminRouteAvailable () { + const right = this.getFirstAdminRightAvailable() + + return this.routesPerRight[right] } - logout() { - this.authService.logout(); + logout () { + this.authService.logout() // Redirect to home page - this.router.navigate(['/videos/list']); + this.router.navigate(['/videos/list']) + } + + private computeIsUserHasAdminAccess () { + const right = this.getFirstAdminRightAvailable() + + this.userHasAdminAccess = right !== undefined } }