ABP.IO WEB應用程式框架 授權資料表定義
以實際資料表的資料、前端畫面與 Chrome F12 Network XHR
來看 ABP 的權限管理系統是如何運作的
.Net Core Identity
ABP 授權基於微軟官方 .Net Core Identity,這邊先看一下實體相關訊息
實體類型
參考文件: 實體類型
此 Identity 模型包含下列實體類型:
User 代表使用者。
Role 代表角色。
UserClaim 表示使用者擁有的宣告。
UserToken 表示使用者的驗證權杖。
UserLogin 將使用者與登入產生關聯。
RoleClaim 代表授與角色內所有使用者的宣告。
UserRole 關聯使用者和角色的聯結實體。
實體類型關聯性
參考文件: 實體類型關聯性
實體類型會以下列方式彼此相關:
每個都 User 可以有許多 UserClaims 。
每個都 User 可以有許多 UserLogins 。
每個都 User 可以有許多 UserTokens 。
每個都 Role 可以有許多相關聯的 RoleClaims 。
每個都 User 可以有許多相關聯 Roles ,而且每個都 Role 可以與許多相關聯 Users 。 這是多對多關聯性,需要資料庫中的聯結資料表。 聯結資料表是由 UserRole 實體表示。
ABP 授權
ABP 在 .Net Core Identity 的使用者與角色之外又加了一個授權表,授權相關資料表如下
[AbpUsers]:使用者
[AbpRoles]:角色
[AbpUserRoles]:使用者角色關係
[AbpPermissionGrants]:權限授予
使用者與角色應該沒有甚麼問題,這邊主要介紹一下 AbpPermissionGrants 這張表
AbpPermissionGrants (權限授予表)
[Name]:賦予權限名稱
BookStore.Books:讀取
BookStore.Books.Create:建立
BookStore.Books.Edit:更新
BookStore.Books.Delete:刪除
[ProviderName]:決定 [ProviderKey] 的種類
R:Role(角色)
U:User(使用者)
(應該還有個C代表Client)
[ProviderKey]:紀錄實際賦予權限的目標
[AbpRoles].[Name]:角色名稱
Admin
Tester
[AbpUsers].[Id]:使用者唯一識別碼
0bac35fb-50b2-b79c-ca02-39fdf320f3f7

從關聯性可以看出使用者與角色中間透過使用者角色建立關係

從資料可以看出全賦予的ProviderKey對應到角色的名稱

而前端如何知道系統有哪些權限,使用者又取得了甚麼權限,則是透過 application-configuration 這支 API 回傳 Auth 的 Policies 與 GrantedPolicies
Auth
GrantedPolicies
BookStore.Authors
BookStore.Authors.Create
Policies
BookStore.Authors
BookStore.Authors.Create
BookStore.Authors.Edit
BookStore.Authors.Delete

然後前端可以根據這些權限資料來決定menu與按鈕要不要顯示給使用者操作對應功能
比如:Admin 登入會顯示管理,Tester 登入責管理不會出現在 menu 中
(應該也可以透過 claim 來看)

1.會先建立角色

2.賦予角色權限

3.修改使用者

4.賦予使用者角色

也可以直接給使用者特定權限

直接將權限賦予使用者Id

這邊的U代表使用者,R代表角色,冒號後面則是對應的Key

回資料庫可以看到權限賦予時直接將使用者的Id當作Key存進了權限賦予表中。
參照:
ABP.IO WEB應用程式框架 新手教學 No.06 開發教學 第 5 部分 授權

PS5
ABP
回首頁
本文章從點部落遷移至 Writerside