路由器可以使用超过1个防护来激活孩子

时间:2018-02-26 10:14:47

标签: angular angular-guards

我正在使用多个canActivateChild防护装置,如下所示:

{path: 'admin', canActivateChild : [AdminAuthGuard, EmployeeAuthGuard], children: adminRoutes }

以下是admin guard的定义:

canActivateChild() : boolean {
   const role = localStorage.getItem('role');
   if(role === 'admin') {
     return true;
   }
   else {
     return false;
   }
}

我有非常相似的员工警卫,我在检查角色是员工。 上述代码的问题是:

  1. 如果我的第一个后卫返回假,那么第二个后卫根本就没有被执行。
  2. 如果我的第一个后卫返回真实而我的第二个后卫返回假。这条路线当时也失败了。
  3. 注意:我的警卫是同步的我仍然面临这个问题。请告诉我如何解决?

    实际代码比这复杂得多。这只是获取帮助的示例代码。

1 个答案:

答案 0 :(得分:3)

创建一个组合守卫,关闭另外两个检查两个返回值的守卫:

class CombinedGuard {
  constructor(private adminGuard: AdminAuthGuard, private employeeGuard: EmployeeAuthGuard) {}

  canActivate(r, s) {
        // defined your order logic here, this is a simple AND
        return this.adminGuard.canActivate(r, s) && this.employeeGuard.canActivate(r,s)
  }
}

然后在路由中使用CombinedGuard:

{path: 'admin', canActivateChild : [CombinedGuard], children: adminRoutes }

How to wait for guards in Angular启发