welcome screen

This commit is contained in:
2020-04-26 16:38:06 +02:00
committed by smuddy
parent 3b6bebcbac
commit 5d47c0c611
29 changed files with 538 additions and 16 deletions

View File

@@ -0,0 +1,45 @@
import {Injectable} from '@angular/core';
import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree} from '@angular/router';
import {Observable} from 'rxjs';
import {UserService} from '../../services/user/user.service';
import {map} from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class RoleGuard implements CanActivate {
constructor(private userService: UserService, private router: Router) {
}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> {
const requiredRoles = next.data.requiredRoles;
if (!requiredRoles) throw new Error('requiredRoles is not defined!');
return this.userService.user$.pipe(
map(user => {
const roles = user.role?.split(';') ?? [];
if (roles.indexOf('admin') !== -1) return true;
const allowed = roles.some(s => requiredRoles.indexOf(s) !== -1);
return allowed || this.router.createUrlTree(this.defaultRoute(roles));
})
)
}
private defaultRoute(roles: string[]): string[] {
if (!roles || roles.length === 0) return ['brand', 'new-user'];
switch (roles[0]) {
case 'user':
return ['songs'];
case 'presenter':
return ['presentation'];
case 'leader':
return ['shows'];
}
return ['brand', 'new-user'];
}
}