在 Authorization 的部分,ABP 本身架構了一套以 Permission 爲主的授權機制,Permission 會在 AuthorizationProvider.SetPermissions 中被定義。(如下圖)
Permission 的使用時機,上至各個 layer,下至 method 都可以掛載 AbpAuthorize attribute 加以套用授權驗證。(下圖爲掛載授權驗證到特定 method)
又或是在程式碼之中,某段程式碼需要驗證授權,就可以利用 PermissionChecker 來處理。
而前端的部分,ABP 也已經提供好 js api 供呼叫做驗證。(如下)
abp.auth.isGranted('Administration.UserManagement.CreateUser');
介紹完如何定義 Permission 及套用授權驗證之後,來介紹如何在 ABP 中,授予權限,在 ABP 有規劃 User 跟 Role 的機制,而 Permission 是可以針對 User 跟 Role 去授予權限的。
如果是要針對 Role 去授予權限,則需要使用 ABP 提供的 RoleManager.SetGrantedPermissionsAsync 方法,而如果是要針對 User 個別授予權限,則使用 UserManager.SetGrantedPermissionsAsync,下圖以使用 RoleManager 爲例。
簡單介紹完 Authorization 之後,就要來介紹一下 Menu 的部分,Menu 通常會跟 Authorization 連動(有權限的功能才看的到 Menu)。
在 ABP,Menu 也是靜態的(就跟 Permission 一樣),Menu 被定義在 NavigationProvider.SetNavigation。(如下圖)
在上圖中,可以看到最下方的 UserManagement menu 有一個 requiredPermissionName 屬性,這個就是對應到 Permission name 的部分,只有當 user 被授予該 Permission 時,才會看到這個 menu 以及操作功能(該功能也需要掛上權限)。
其他沒有設定 requiredPermissionName 屬性的 menu,則屬於一般 menu,只要登入成功的 user 都可以看到。
至此,Authorization 與 menu 已經介紹完了,而目前有個常見的問題是,很多案例都是將權限與 Menu 資料放在 DB 之中,下次將會分享如何在 ABP 實現動態建立 Permission 與 Menu。