【发布时间】:2021-12-02 17:34:27
【问题描述】:
我是从我的 routing.module.ts 调用这个函数的。此函数检查用户是否有声明,返回 true 否则将他重定向到错误页面。
const routes: Routes = [
{
path: NavigationURL_EmployeeAuditChildren.PayItems, component: PayItemsComponent, canActivate: [EmployeeGuard], data: { claim: claims.employeePayItemAccess} }
}
这里叫做
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
const claim: string = route.data[RouteData.Claim];
return this.securityService.hasClaim(claim).pipe(
map((hasClaim) => {
if (hasClaim) {
return true;
} else {
this.router.navigate(['/forbidden']);
return false;
}
})
);
}
我需要修改此函数,以检查多个声明。如果用户有任何这些声明,它应该返回 true,否则返回错误页面。我正在考虑使用 claim.map() 来遍历每个声明。但是,如果找到任何声明,如何从其中返回,否则返回错误页面?
const routes: Routes = [
{
path: NavigationURL_EmployeeAuditChildren.PayItems, component: PayItemsComponent, canActivate: [EmployeeGuard], data: { darwinClaim: [claims.employeePayItemAccess, claims.employeePayItemAuditAccess] }
}
它调用:
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {
const claims: string[] = route.data[RouteData.Claim];
claims.foreach(claim -> {
this.securityService.hasClaim(claim).pipe(
map((hasClaim) => {
if (hasClaim) {
return true;
}
})
)});
this.router.navigate(['/forbidden']);
return false;
}
【问题讨论】:
-
我正在使用 securityService.hasClaim() 方法来检查我已声明。我正在里面做其他事情,所以无法删除它。它返回一个可观察的。现在我必须在循环中运行调用此方法,但由于它是可观察到的,这让事情变得非常困难。
标签: angular foreach rxjs observable