Angular 2 如何在同一路径上应用多个具有或关系的守卫
Angular 2 How to Apply Multiple Guards with Or-Relationship on the Same Path
我的应用程序允许根据用户角色访问内容。我为每个角色写了一个 Router Guard。某些内容允许 role1 或 role2 或 role3 访问。我应该如何在 feature-routing.module.ts 文件中编写 canActivate 声明?据我了解,如果我写
canActivate:[Role1Guard, Role2Guard, Role3Guard]
如果任何守卫 returns 错误,访问将被拒绝。但就我而言,如果任何守卫 returns 为真,我应该允许访问。怎么做?非常感谢!
你可以这样写 OrGuard
:
class OrGuard() {
guards: any[];
constructor(...guards) { this.guards = guards }
canActivate() {
return this.guards.some(Boolean);
}
}
并像这样使用它:
canActivate:[new OrGuard(Role1Guard, Role2Guard, Role3Guard)]
...只是一个想法,实际实现可能会有所不同,我没有尝试 (;
在这种情况下,我们可以做的是创建一个 Master Guard,它将根据我们的要求触发应用程序防护。
查看this答案以了解方法。
假设你已经完成了上面的link,这种情况下的方法可以像修改Route
[=29=中的data
属性一样简单].
像这样 -
{
path: "view2",
component: View2Component,
//attach master guard here
canActivate: [MasterGuard],
//this is the data object which will be used by
//masteer guard to execute guard1, guard 2, guard 3 & guard 4
data: {
trigger: {
operator: "OR",
guards: [
GUARDS.GUARD1,
GUARDS.GUARD2,
GUARDS.GUARD3,
GUARDS.GUARD4
]
}
}
}
然后使用operator
标志相应地解雇所有守卫。
希望对您有所帮助:)
我的应用程序允许根据用户角色访问内容。我为每个角色写了一个 Router Guard。某些内容允许 role1 或 role2 或 role3 访问。我应该如何在 feature-routing.module.ts 文件中编写 canActivate 声明?据我了解,如果我写
canActivate:[Role1Guard, Role2Guard, Role3Guard]
如果任何守卫 returns 错误,访问将被拒绝。但就我而言,如果任何守卫 returns 为真,我应该允许访问。怎么做?非常感谢!
你可以这样写 OrGuard
:
class OrGuard() {
guards: any[];
constructor(...guards) { this.guards = guards }
canActivate() {
return this.guards.some(Boolean);
}
}
并像这样使用它:
canActivate:[new OrGuard(Role1Guard, Role2Guard, Role3Guard)]
...只是一个想法,实际实现可能会有所不同,我没有尝试 (;
在这种情况下,我们可以做的是创建一个 Master Guard,它将根据我们的要求触发应用程序防护。
查看this答案以了解方法。
假设你已经完成了上面的link,这种情况下的方法可以像修改Route
[=29=中的data
属性一样简单].
像这样 -
{
path: "view2",
component: View2Component,
//attach master guard here
canActivate: [MasterGuard],
//this is the data object which will be used by
//masteer guard to execute guard1, guard 2, guard 3 & guard 4
data: {
trigger: {
operator: "OR",
guards: [
GUARDS.GUARD1,
GUARDS.GUARD2,
GUARDS.GUARD3,
GUARDS.GUARD4
]
}
}
}
然后使用operator
标志相应地解雇所有守卫。
希望对您有所帮助:)