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/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 ------------------------- 4 files changed, 10 insertions(+), 41 deletions(-) delete mode 100644 client/src/app/core/auth/login-guard.service.ts (limited to 'client/src/app/core/auth') diff --git a/client/src/app/core/auth/auth-user.model.ts b/client/src/app/core/auth/auth-user.model.ts index 81bff99a0..085b763ec 100644 --- a/client/src/app/core/auth/auth-user.model.ts +++ b/client/src/app/core/auth/auth-user.model.ts @@ -1,6 +1,7 @@ // Do not use the barrel (dependency loop) -import { UserRole } from '../../../../../shared/models/users/user-role.type' +import { hasUserRight, UserRole } from '../../../../../shared/models/users/user-role' import { User, UserConstructorHash } from '../../shared/users/user.model' +import { UserRight } from '../../../../../shared/models/users/user-right.enum' export type TokenOptions = { accessToken: string @@ -81,7 +82,7 @@ export class AuthUser extends User { id: parseInt(localStorage.getItem(this.KEYS.ID), 10), username: localStorage.getItem(this.KEYS.USERNAME), email: localStorage.getItem(this.KEYS.EMAIL), - role: localStorage.getItem(this.KEYS.ROLE) as UserRole, + role: parseInt(localStorage.getItem(this.KEYS.ROLE), 10) as UserRole, displayNSFW: localStorage.getItem(this.KEYS.DISPLAY_NSFW) === 'true' }, Tokens.load() @@ -122,11 +123,15 @@ export class AuthUser extends User { this.tokens.refreshToken = refreshToken } + hasRight(right: UserRight) { + return hasUserRight(this.role, right) + } + save () { localStorage.setItem(AuthUser.KEYS.ID, this.id.toString()) localStorage.setItem(AuthUser.KEYS.USERNAME, this.username) localStorage.setItem(AuthUser.KEYS.EMAIL, this.email) - localStorage.setItem(AuthUser.KEYS.ROLE, this.role) + localStorage.setItem(AuthUser.KEYS.ROLE, this.role.toString()) localStorage.setItem(AuthUser.KEYS.DISPLAY_NSFW, JSON.stringify(this.displayNSFW)) this.tokens.save() } diff --git a/client/src/app/core/auth/auth.service.ts b/client/src/app/core/auth/auth.service.ts index 9ac9ba7bb..df6e5135b 100644 --- a/client/src/app/core/auth/auth.service.ts +++ b/client/src/app/core/auth/auth.service.ts @@ -21,7 +21,7 @@ import { // Do not use the barrel (dependency loop) import { RestExtractor } from '../../shared/rest' import { UserLogin } from '../../../../../shared/models/users/user-login.model' -import { User, UserConstructorHash } from '../../shared/users/user.model' +import { UserConstructorHash } from '../../shared/users/user.model' interface UserLoginWithUsername extends UserLogin { access_token: string @@ -126,12 +126,6 @@ export class AuthService { return this.user } - isAdmin () { - if (this.user === null) return false - - return this.user.isAdmin() - } - isLoggedIn () { return !!this.getAccessToken() } diff --git a/client/src/app/core/auth/index.ts b/client/src/app/core/auth/index.ts index a81f2c002..bc7bfec0e 100644 --- a/client/src/app/core/auth/index.ts +++ b/client/src/app/core/auth/index.ts @@ -1,4 +1,4 @@ export * from './auth-status.model' export * from './auth-user.model' export * from './auth.service' -export * from './login-guard.service' +export * from '../routing/login-guard.service' diff --git a/client/src/app/core/auth/login-guard.service.ts b/client/src/app/core/auth/login-guard.service.ts deleted file mode 100644 index c09e8fe97..000000000 --- a/client/src/app/core/auth/login-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 './auth.service' - -@Injectable() -export class LoginGuard implements CanActivate, CanActivateChild { - - constructor ( - private router: Router, - private auth: AuthService - ) {} - - canActivate (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - if (this.auth.isLoggedIn() === true) return true - - this.router.navigate([ '/login' ]) - return false - } - - canActivateChild (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { - return this.canActivate(route, state) - } -} -- cgit v1.2.3