У меня есть маршрут с двумя охранниками canActivate
(AuthGuard
и RoleGuard
). Первая (AuthGuard
) проверяет, вошел ли пользователь в систему, а если нет, перенаправляется на страницу входа. Второй проверяет, имеет ли пользователь определенную роль, которая разрешена для просмотра страницы, а если нет, перенаправляет на неавторизованную страницу.
canActivate: [ AuthGuard, RoleGuard ]
...
export class AuthGuard implements CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
...
this.router.navigate(['/login']);
resolve(false);
}
export class RoleGuard implements CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
...
this.router.navigate(['/unauthorized']);
resolve(false);
}
Проблема в том, что когда я получаю доступ к маршруту, и я не вошел в систему, я нажимаю AuthGuard
, который терпит неудачу и говорит маршрутизатору перейти к /login
. Однако, несмотря на то, что AuthGuard
не удалось, RoleGuard
работает в любом случае, а затем переходит на /unauthorized
.
По-моему, бессмысленно запускать следующего охранника, если первое не удается. Есть ли способ обеспечить соблюдение этого поведения?