1

我想知道您是否使用 RoleGuard 来检查是否有人可以激活路径,并且您希望在子项目中使用不同的 RoleGuard 是可能的:

我已经尝试过,但我无法使用不同的 RoleGuard 访问路径

{
    path: 'admin',
    canActivate: [AdminGuard],
    children: [
        { path: '', redirectTo: 'test', pathMatch: 'full'},
        { path: 'test', component: MasterDataComponent},
        { path: 'test/subtest', component: ObjectsTypeComponent },
        { path: 'test/subtest/:operation', component: ObjectsTypeDetailComponent },
        { path: 'test/subtest/:operation/:id', component: ObjectsTypeDetailComponent },
        { path: 'test/money', component: DivisesComponent, canActivate: [OperatorGuard] } 
}

因此,只有管理员可以进入此路径,但我想允许操作员进入路径 test/money。

谢谢指教。

4

1 回答 1

1

您正在尝试在已经有 Guard 的路线内使用 Guard。如果警卫“增强安全性”(也就是添加属性),这将是可以的。

但是,一旦你想覆盖保护属性,你有两个选择:

  1. 分别为每条路线添加警卫。
  2. 添加另一个将覆盖第一个路由(您必须编写OperatorOrAdminGuard)。
{
    path: 'admin',
    canActivate: [AdminGuard],
    children: [
            { path: '', redirectTo: 'test', pathMatch: 'full'},
            { path: 'test', component: MasterDataComponent},
            { path: 'test/subtest', component: ObjectsTypeComponent },
            { path: 'test/subtest/:operation', component: ObjectsTypeDetailComponent },
            { path: 'test/subtest/:operation/:id', component: ObjectsTypeDetailComponent },
    ],
},
{
    path: 'admin/test/money',
    component: DivisesComponent, 
    canActivate: [OperatorOrAdminGuard]
}

您可以使用GuardFactory. 在这里解释:将参数传递到路由保护中

然后,像这样使用它:

{ 
   path: 'admin/test/money, 
   component: DivisesComponent,
   canActivate: RoleGuard,
   data: {roles: ['Operator', 'Admin']}
}
于 2019-06-03T16:51:01.700 回答