我瞭解基於JWT的身份驗證的工作原理,但我正在努力瞭解在angular2中創建基於角色的訪問控制的正確方法。Angular2中基於角色的訪問控制?
有人可以提供一種方法來解決這個問題,或一些有用的鏈接。
我瞭解基於JWT的身份驗證的工作原理,但我正在努力瞭解在angular2中創建基於角色的訪問控制的正確方法。Angular2中基於角色的訪問控制?
有人可以提供一種方法來解決這個問題,或一些有用的鏈接。
在角應用程序,你可以做這些事情: 1 - 確保AuthGuard返回如果假用戶無權訪問特定組件。 2 - 隱藏用戶不應該看到的菜單項。
請記住,真正的授權在服務器端強制執行,在angular2中,您只是處理表示層。
這裏是一個可能的方法:
您添加自定義要求的JWT令牌。它可以是這樣的:
{ 「用戶」: 「JOHNDOE」, 「角色」: 「管理」, 「經理」, 「無所謂」] }
在角應用創建AuthService,在此處解碼JWT令牌並將提取的聲明存儲在變量中,並存儲在本地存儲器中您可以創建一個navigationService,它將存儲有關訪問對象中特定組件所需的菜單和角色的數據或數組。它可以是類似的東西(僞代碼):
const menuItems = [
{
"name":"Dashboard",
"routerLink":"/dashboard",
"rolesRequired":["user"]
},
{
"name":"ControlPanel",
"routerLink":"/cp",
"rolesRequired":["admin"]
},
.....
constructor(private authService:AuthService){}
getMenu(){
return this.menuItems.filter(
element => {
return
this.authService.user.role.haveElement(element.rolesRequired)
}
}
在菜單組件可以使用導航服務以檢索列表中菜單項。
您可以在AuthGuard中使用相同的navigationService。
可以使用Ng2Permission模塊,角色和權限的訪問控制你的角度2.0應用程序。
也有ngx-permissions庫這個庫的關鍵區別,它將從DOM中刪除對象,而不是通過css隱藏它。 它包含在項目
@NgModule({
imports: [
NgxPermissionsModule.forRoot()
],
})
export class AppModule { }
定義角色
NgxRolesService
.addRole('ROLE_NAME', ['permissionNameA', 'permissionNameB'])
NgxRolesService.addRole('Guest',() => {
return this.sessionService.checkSession().toPromise();
});
NgxRolesService.addRole('Guest',() => {
return true;
});
使用模板
<div *ngxPermissionsOnly="['ADMIN', 'GUEST']">
<div>You can see this text congrats</div>
</div>
爲了更好的文檔看wiki
這都沒有關係RBAC這是一個處理授權的方法,以及OP詢問的內容。身份驗證是另一回事。從這裏投票。 –