Javascript 安格拉尔2号,工厂警卫可以吗?
我对我的网站非常信任,因此为了确保安全路线,我建立了下一个守卫:Javascript 安格拉尔2号,工厂警卫可以吗?,javascript,angular,angular2-routing,angular2-services,angular-guards,Javascript,Angular,Angular2 Routing,Angular2 Services,Angular Guards,我对我的网站非常信任,因此为了确保安全路线,我建立了下一个守卫: export class TrustGuard implements CanActivate { constructor(private router: Router) { } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { return /*Check if user ha
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:[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 } }