У меня есть следующий Angular Guard:
export class AdminGuard implements CanActivate {
constructor(
private readonly router: Router,
private readonly userService: UserService
) { }
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.userService.getUserRoles().pipe(
map(roles => {
if (roles.admin) {
return true
}
this.router.navigate(['/'])
return false
})
)
}
}
Это метод из службы, который возвращает Observable:
public getUserRoles(): Observable<any> {
return this.store.pipe(
select('user'),
map(({ roles }) => roles)
)
}
И это работает, когда я перемещаюсь между страницами , но когда я напрямую ввожу в URL какой-либо маршрут, например myapp.com/admin, он автоматически возвращает false и защита не работает. Как заставить его работать правильно?