我正在使用路線衛兵保護我的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
。但如果我想強制執行Active
和或者和Admin
或 a Manager
?
很簡單執行的API 像這樣:
[Authorize(Roles = "Active")]
[Authorize(Roles = "Admin, Manager")]
public class SomeController : ApiController
但我怎麼做到這一點的角?
你可以做一個單一的後衛來管理這兩種情況,儘管它並不那麼幹淨,我還沒有看到任何其他解決方案...... 這就是說,管理員看起來很奇怪,沒有一些令牌檢查以及。你可以通過給你的代幣添加一個'admin'角色來解決這個問題 –
我寧願不加以合併,因爲目前有6個角色具有重疊權限。但如果Angular不支持這種方式,那麼這是我的最佳選擇 –