路由器 canActivateChild 有超过 1 个守卫

Router canActivateChild with more than 1 guard

我正在使用多个 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. 如果我的第一个守卫 return 为假,第二个守卫根本不会被执行。
  2. 如果我的第一个守卫 return 为真而我的第二个守卫 return 为假。当时路由也失败了。

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

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

创建一个组合的守卫,将其他 2 个守卫检查两个 return 值:

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 }

灵感来自