Пусть ваш токен jwt
содержит что-то вроде level
, которое может быть "user" или "admin".Как только они войдут в систему, вы можете позвонить isLoggedIn()
в вашей guard
службе.
Так же в вашей auth.service.ts
:
private isLoggedInAs = new BehaviorSubject<any>('');
isLoggedIn = this.isLoggedInAs.asObservable();
// check if user is logged in, and if so with what level
public isLoggedIn() {
// insert relevant filters that will return false
const jwtpayload = jwt.decode(this.getToken());
this.updateLoggedIn(jwtpayload.level);
return true;
}
updateLoggedIn(level: string) {
this.isLoggedInSource.next(level);
}
И в вашем guard.service.ts
:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this.authService.isLoggedIn()) {
this.router.navigate(['/pages']);
return false;
} else {
return true;
}
}
А там, где вам нужно знать их уровень, вы можете сделать что-то вроде этого:
ngOnInit() {
this.authService.isLoggedIn.subscribe(isLoggedIn => {
if (isLoggedIn) {
this.isLoggedIn = isLoggedIn;
} else {
this.isLoggedIn = 'anonymous';
}
});
}