过去4个小时我一直在寻找这个,但却无法找到答案。
我写了几个Authguards,我希望能够告诉路由器,如果其中一些是真的,它应该给予许可,但有角度的2路由器检查每个守卫是否为真,然后给予许可,否则它将阻止链接,这有什么好办法吗?我可以写几个身份验证警卫,但我认为这不是一个好主意。
例如,我希望管理员和超级用户可以访问/profile
页面,但我不希望普通用户访问/profile
页面
答案 0 :(得分:1)
你可以将你的警卫注射到一个父守卫中并自己控制:
@Injectable()
class Guard implements CanActivate {
constructor(private guard1: Guard1, private guard2: Guard2) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean {
// I'm assuming that your guard1.canActivate and guard2.canActivate return boolean
return guard1.canActivate() || guard2.canActivate();
}
}
在您的路线配置中,仅使用Guard
警卫:
{
path : 'route',
canActivate : Guard
...
}
当然,您可以在其他路线中使用guard1
和guard2
。
答案 1 :(得分:1)
您可以在身份验证后卫中使用CanLoad
界面。例如,让我们说你的路线就是这样;
{
path: 'profile',
component: 'ProfileComponent',
canLoad: [
AuthenticationGuard
]
}
在AuthenticationGuard
中,实施CanLoad
界面。如果用户没有此链接的权限,则不会加载此路由的模块。
export class AuthenticationGuard implements CanLoad {
canLoad(route: Route): Observable<boolean> | Promise<boolean> | boolean {
//in here ask your authentication service to check current user has permission for this route
}
}
我希望它有所帮助,请让我知道更多问题。