我有一个 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
}
},