Есть ли опции / переменные для canActivate в Angular 4
Я хотел бы отказать в доступе к маршрутам на основе прав, которыми обладает пользователь. Так что у меня есть таблица внутри моего mongoDb с userRights и двумя простыми охранниками на самом деле. Один для зарегистрированных пользователей и один для администраторов.
Так что теперь я хотел бы дать пользователю право посетить конкретный маршрут. Поэтому я хотел бы добавить свой canActivate: [checkForRightGuard]
который анализируется по праву, так что проверьте, но как мне это сделать?
Я думал об этом решении, потому что я не думаю, что я должен создавать защиту для каждого права, которое я должен проверить - или?
Так что я думаю о чем-то. как это (конечно, это не работает, но я думаю, что это показывает, что мне нужно)
{path: 'admin/expandSoftware', component: ExpandSoftwareComponent, canActivate: [AdminGuard('canExpandSoftware')]},
1 ответ
Вы можете добавить свойствоdata к маршруту, например, так:
{
path: 'admin/expandSoftware',
component: ExpandSoftwareComponent,
canActivate: [AdminGuard],
data: {authorization: 'canExpandSoftware'}
}
и тогда в вашем маршруте охраны вы можете получить к нему доступ следующим образом:-
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
console.log(route.data["authorization"]);
return this.canActivate(route, state);
}
но будьте осторожны, вам может быть запрещено передавать динамические (во время выполнения) данные в ваши маршруты, если вы используете компиляцию AOT (Ahead of Time), так как маршруты анализируются во время компиляции при использовании компиляции AOT.