路由器 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;
}
}
我有非常相似的员工警卫,我正在检查作为员工的角色。
上面代码的问题是:
- 如果我的第一个守卫 return 为假,第二个守卫根本不会被执行。
- 如果我的第一个守卫 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 }
灵感来自
我正在使用多个 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;
}
}
我有非常相似的员工警卫,我正在检查作为员工的角色。 上面代码的问题是:
- 如果我的第一个守卫 return 为假,第二个守卫根本不会被执行。
- 如果我的第一个守卫 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 }
灵感来自