У нас есть защита маршрутизации для CanActivate
, которая отлично работает при переходе между ссылками на сайте, но не работает, когда мы полностью обновляем браузер (т. Е. Он перенаправляет на домашнюю страницу, такое же поведение, как если бы CanActivate
возвращает false).
Это моя охрана
@Injectable()
export class PermissionCheckGuard implements CanActivate {
constructor(private userPermissionService: UserPermissionService) { }
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
let permissionTag = route.data["permissionTag"] as string;
let hasPermission$ = this.userPermissionService.hasPermission(null, SubjectType.Site, permissionTag, null);
hasPermission$.subscribe(x => {
console.log(x);
});
return hasPermission$;
}
}
Это моя конфигурация маршрутизатора: -
path: 'security/security-example', component: SecurityExampleComponent, canActivate: [PermissionCheckGuard], data: { permissionTag: 'Site_Permission_1' }
В случае, если это имеет значение, это функция hasPermission
public hasPermission(userId: string, subjectType: SubjectType, permissionTag: string, subjectId: string): Observable<boolean> {
if (userId == null) {
userId = 'Current';
}
const url = this.apiUrlBuilder.create('Security', 'Users', userId, 'Permission', {
permissionTag: permissionTag,
subjectType: subjectType,
subjectId: subjectId
});
return this.http.get(url)
.map<Response, boolean>((response: Response) => {
return <boolean>response.json();
})
.catch((error) => {
return this.errorHandlingService.ToNotification(error, this);
})
}
Я не вижу, что я делаю неправильно, охранник возвращает наблюдаемое, а журнал консоли всегда возвращает true
.Это проблема с angular или в моем коде ошибка?