В этом проекте exaple с аутентификацией JWT мы видим, как чтобы разрешить доступ к какому-либо маршруту только аутентифицированным пользователям:
import { RouterConfig } from '@angular/router';
import { Home } from './home';
import { Login } from './login';
import { Signup } from './signup';
import { AuthGuard } from './common/auth.guard';
export const routes: RouterConfig = [
{ path: '', component: Login },
{ path: 'login', component: Login },
{ path: 'signup', component: Signup },
{ path: 'home', component: Home, canActivate: [AuthGuard] },
{ path: '**', component: Login },
];
Я хотел бы сделать шаг дальше и также указать, какая роль пользователя имеет «доступ» к маршруту, но я не знаю, как передать аргумент в canActivate AuthGuard (src). Поэтому я хотел бы добиться чего-то вроде этого (например, у меня две роли: администратор и сотрудник):
{ path: 'home', component: Home, canActivate: [AuthGuard] },
{ path: 'users', component: AdminUsers, canActivate: [AuthGuard('Admin')] },
{ path: 'users', component: Employees, canActivate: [AuthGuard('Employee')] },
Где мой AuthGuard может выглядеть примерно так (где userRole (= Admin или Employee или null) передается параметр AuthGuard):
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(userRole) {
if (!userRole || JWT.user().role == userRole) {
return true;
}
this.router.navigate(['/login']);
return false;
}
}
где JWT.user.role - это помощник, который читает роль пользователя, хранящуюся в токене JWT. Есть ли способ сделать что-то похожее на идею выше?