Вы пытаетесь использовать Стража внутри маршрута, у которого уже есть Страж. Это было бы хорошо, если бы охранники "повышали безопасность" (иначе говоря, добавляли свойства).
Но, как только вы захотите переопределить свойства защиты, у вас есть два варианта:
- Добавить охранников к каждому маршруту отдельно.
- Добавьте еще один маршрут, который переопределит первый (вы должны написать
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']}
}