[英]Angular2, factory guard is possible?
我在我的網站上有很多信任,所以為了建立安全路線,我建立了下一個守衛:
export class TrustGuard implements CanActivate {
constructor(private router: Router) {
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return /*Check if user has the trust or not*/;
}
}
所以,在路線中,我可以添加像canActivate: [TrustGuard]
這樣的canActivate: [TrustGuard]
問題是我有太多的信任,因此我需要為每個信任建立一個守衛。 因此,我正在努力建立一個警衛工廠,以避免實施太多類似的警衛。
我的目標是找到像canActivate: [FactoryTrustGuard(Trust.seeDashboard)]
一樣設置路線的canActivate: [FactoryTrustGuard(Trust.seeDashboard)]
這有可能嗎?
這可能會產生AOT問題,因為路由定義應該是靜態的。
警衛可以干掉以消除大多數樣板代碼:
export abstract class TrustGuard {
protected abstract trust: string;
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
/* check against this.trust */
}
}
export class FooTrustGuard extends TrustGuard {
protected trust = Trust.foo;
}
如果有幾十個類似的守衛,可以使它成為一個單一的守衛並通過路線數據傳遞角色:
export class TrustGuard {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const trust = route.data['trust'];
if (trust in Trust) {
...
} else {
throw ...;
}
}
}
並使用它
{ route: ..., canActivate: [TrustGuard], data: { trust: Trust.seeDashboard } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.