17

我的应用程序允许基于用户角色访问内容。我为每个角色编写了一个Router Guard。某些内容允许角色1 或角色2 或角色3 访问。我应该如何在 feature-routing.module.ts 文件中编写 canActivate 声明?据我了解,如果我写

canActivate:[Role1Guard, Role2Guard, Role3Guard]

如果任何守卫返回 false,则访问将被拒绝。但就我而言,如果任何警卫返回 true,我应该允许访问。怎么做?提前谢谢了!

4

2 回答 2

2

在这种情况下,我们可以做的是创建一个Master Guard,它将根据我们的要求触发应用程序保护。

查看答案以了解该方法。

假设您已经浏览了上面的链接,这种情况下的方法可能就像修改类中的data属性一样简单Route

像这样的东西-

{
    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
            ]
        }
    }
}

然后使用operatorflag 相应地解雇所有警卫。

我希望这有帮助 :)

于 2017-12-07T15:36:10.427 回答
1

你可以这样写OrGuard

class OrGuard() {
  guards: any[];
  constructor(...guards) { this.guards = guards }

  canActivate() {
    return this.guards.some(Boolean);
  }
}

并像这样使用它:

canActivate:[new OrGuard(Role1Guard, Role2Guard, Role3Guard)]

...只是一个想法,实际实现可能会有所不同,我没有尝试 (;

于 2017-04-01T23:33:03.770 回答