Angular 2如何在同一路径上应用具有Or-Relationship的多个防护

Nic*_*ann 13 angular2-routing angular2-guards angular

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

canActivate:[Role1Guard, Role2Guard, Role3Guard]
Run Code Online (Sandbox Code Playgroud)

如果任何警卫返回false,则拒绝访问.但在我的情况下,如果任何一个守卫返回true,我应该允许访问.怎么做?提前谢谢了!

pla*_*ter 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
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用operator旗帜相应地解雇所有警卫。

我希望这有帮助 :)