1

我正在使用多个 canActivateChild 守卫,如下所示:

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

以下是管理员守卫的定义:

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

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

  1. 如果我的第一个守卫返回 false,则根本不执行第二个守卫。
  2. 如果我的第一个守卫返回 true,而我的第二个守卫返回 false。这条路线当时也失败了。

注意:我的警卫是同步的,但我仍然面临这个问题。请让我知道我该如何解决?

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

4

1 回答 1

3

从检查两个返回值的其他 2 个守卫中创建一个组合守卫:

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 }

灵感来自如何在 Angular 中等待守卫

于 2018-02-26T10:27:52.163 回答