我在我的项目中使用了 angular2 和 laravel 5.3。在laravel中,当用户登录服务器时,将发送用户的权限以处理角度授权。所以我写了一个守卫来保护无法访问的用户的路由。
这是我的警卫类代码:
export class AccessGuard implements CanActivate{
permissions;
currentRoute;
constructor(private authService:AuthService,private router:Router){
this.permissions = this.authService.getPermissions();
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
return this.checkHavePermission(state.url);
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
return this.checkHavePermission(state.url);
}
private checkHavePermission(url){
switch (true) {
case url.match(/^\/panel\/users[\/.*]?/):
return this.getPermission('user.view');
case url.match(/^\/panel\/dashboard/):
return true;
case url.match(/^\/panel\/permissions/):
return this.getPermission('permissions.manager');
case url.match(/^\/panel\/candidates[\/.*]?/):
return this.getPermission('candidate.view');
}
}
getPermission(perm){
for(var i=0;i<this.permissions.length;i++){
if(this.permissions[i].name == perm ){
return true;
}
}
return false;
}
}
既然路由已经安全,我想知道如何访问组件类内的用户权限。因为有时用户可以访问路线,但看不到 dom 的特定部分。我该如何处理这种情况?
您应该将权限存储在服务本身中,而不是存储在守卫中。
因此,当用户进行身份验证时,您可以将权限存储在身份验证服务的属性中。然后在守卫中,你调用this.authService.<property>
使用该权限。在任何其他组件中,您都可以执行相同的操作,this.authService.<property
> 获取用户的权限级别
由于服务将作为单例传递,因此所有组件都可以访问相同的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)