Различный RoleGuard в дочернем элементе Угловая маршрутизация - PullRequest
1 голос
/ 03 июня 2019

Я хотел бы знать, если вы используете 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.

Спасибо за совет.

1 Ответ

1 голос
/ 03 июня 2019

Вы пытаетесь использовать Стража внутри маршрута, у которого уже есть Страж. Это было бы хорошо, если бы охранники "повышали безопасность" (иначе говоря, добавляли свойства).

Но, как только вы захотите переопределить свойства защиты, у вас есть два варианта:

  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']}
}
...