У меня есть приложение angular 4, и я реализовал защиту для аутентификации. У нас есть разные модули, которые используют фабрику для создания того, что мы называем ThemeService. Каждый модуль представляет собой автономное приложение со своими собственными стилями и безопасностью. Каждый модуль сообщает ThemeService, к какой роли должен иметь доступ пользователь, и защита работает хорошо.
Вот охранник:
export class AuthenticatedGuard implements CanActivate
{
constructor (private memSrv:MembershipService,
private themeSrv:ThemeService,private router:Router )
{
}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
return this.memSrv.GetCurrentUser()
.map(u => {
if (!u) {
this.router.navigate([this.themeSrv.LoginUrl]);
return false;
}
var isAuth = u.Capabilities.some(s => s === this.themeSrv.AuthCapability);
if (isAuth) {
return true;
}
else {
//TODO: This is an unauthorized but authenticated user it should go to an unauthorized page
this.router.navigate(["/Unauthorized", { url: state.url }]);
return false;
}
}
);
}
}
Теперь у меня есть модуль с некоторыми маршрутами, которые необходимо защитить с помощью другой роли. Мой вопрос заключается в том, как я могу передать AuthenticationGuard роль, которую необходимо проверять для каждого маршрута. Мне не хотелось бы создавать разных охранников для каждой роли, которую мы хотим проверить.
Ниже приведен фрагмент конфигурации моего маршрута.
{
path: "",
component: Component.MainComponent,
children:
[
{
path: 'attachmentsTest',
component: Component.AttachmentsTestComponent,
},
{
path:"home",
component: Component.HomeComponent,
canActivate: [AuthenticatedGuard],
resolve: {
user: CurrentUserResolver
}
},