我正在使用路由保护来保护我的 Angular 应用程序的前端。在过去与他们合作并在线研究时,为一条路线添加多个守卫要求所有守卫都返回 true 以允许访问。
但是如果我只想要一个返回 true 以允许访问呢?(像 || 而不是 &&)
例如,我的路由守卫在用户的令牌中查找某些角色:
@Injectable()
export class ActiveRoleGuard implements CanActivate {
constructor(private sessionService: SessionService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let token = this.sessionService.getToken();
if (!token) {
return false;
}
if (token.role.toLowerCase().indexOf("active") < 0) {
this.router.navigate(["/issue"]);
return false;
}
return true;
}
}
和
@Injectable()
export class AdminRoleGuard implements CanActivate {
constructor(private sessionService: SessionService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let token = this.appSessionService.getToken();
if (!token) {
return false;
}
if (token.role.toLowerCase().indexOf("admin") < 0) {
this.router.navigate(["/issue"]);
return false;
}
return true;
}
}
如果我要将它们正常组合在路由器模块中,它将类似于...
{path: "someroute", component: SomeComponent, canActivate: [ActiveRouteGuard, AdminRouteGuard]}
...但这将要求用户既是Active
又是Admin
. 但是,如果我想强制执行 beingActive
和an或a怎么办?Admin
Manager
像这样在 API 上强制执行很简单:
[Authorize(Roles = "Active")]
[Authorize(Roles = "Admin, Manager")]
public class SomeController : ApiController
但我如何在 Angular 中做到这一点?