ABP源碼分析四十二:ZERO的身份認證


ABP Zero模塊通過自定義實現Asp.Net Identity完成身份認證功能, 對Asp.Net Identity做了較大幅度的擴展。同時重寫了ABP核心模塊中的permission功能,以實現授權。注意:ABP僅僅使用了Asp.Net Identity的身份認證功能,但沒有使用Asp.Net Identity中的基於role和Claim的授權。

 

ABP Zero 中擴展的Asp.Net Identity實體類: AbpUser, AbpRole。

AbpUser: 代表user的Entity。其實現了Asp.Net Identity的IUser接口。

 

AbpRole: 代表role的Entity。其實現了Asp.Net Identity的IRole接口。一個role代表一組權限。ABP建議檢查user的permission而非role以判斷user是否可以執行某個操作。

 


ABP Zero 中擴展Asp.Net Identity重管理實體的類: AbpUserStore, AbpUserManager,AbpRoleStore,AbpRoleManager。

 

AbpUserStore:主要實現了ASP.NET Identity Framework中與user操作相關的接口:IUserPasswordStore<TUser, long>,IUserEmailStore<TUser, long>,IUserLoginStore<TUser, long>,IUserRoleStore<TUser, long>,IQueryableUserStore<TUser, long>。

同時也實現了IUserPermissionStore<TTenant, TUser>接口。該類通過IRepository<TUser, long>,IRepository<UserLogin, long>,IRepository<UserRole, long>,IRepository<TRole>,IRepository<UserPermissionSetting, long>實例完成User實體的CRUD操作以及與User關聯關系的CRUD操作。

 

 

AbpUserManager:繼承擴展了ASP.NET Identity Framework中UserManager<TUser, long>類。實現了與User相關的領域服務。 

 

AbpRoleStore:其實現了Asp.Net Identity的IQueryableRoleStore接口。 通過IRepository<TRole>,IRepository<UserRole, long>和IRepository<RolePermissionSetting, long>實例完成Role及與role相關的permission/user實體的CRUD操作。

 

AbpRoleManager<TTenant, TRole, TUser>:繼承自Asp.Net Identity的RoleManager<TRole, int>類。這是一個抽象類,實際項目需要指定具體的TTenant, TRole, TUser類型來擴展這個抽象類。該抽象類實現了與Role相關的領域邏輯。

 


其它類

 

UserRole:實現了CreationAuditedEntity<long>的實體類。描述User 和 Role的關系。

 

PermissionSetting:代表user/role 和 permission的關系實體類

 

OrganizationUnit:實現了FullAuditedEntity<long>的實體類,用於表示Organization的實體

 

UserOrganizationUnit:實現了 CreationAuditedEntity<long>的實體類。表示user 和 Organization的關聯關系。

 

UserLogin:實體類用於保存通過外部授權服務授權的用戶的登入信息。

 

RolePermissionCacheItem:這個類實例被用於緩存,其HashSet<string>類型的GrantedPermissions和ProhibitedPermissions對象用於保存role的權限

 

UserPermissionCacheItem:這個類實例被用於緩存,其HashSet<string>類型的GrantedPermissions和ProhibitedPermissions對象用於保存user的權限

 

PermissionEqualityComparer : 實現了IEqualityComparer<Permission>接口中的Equal和GetHashCode方法,用於比較兩個permission.

AbpRolePermissionCacheItemInvalidator:用於定義響應RolePermissionSetting和AbpRoleBase實體改變事件的處理函數。實際完成的工作就是將相應的緩存對象從緩存中刪除。

 

AbpUserPermissionCacheItemInvalidator:用於定義響應UserPermissionSetting,UserRole和AbpUser實體改變事件的處理函數。實際完成的工作就是將相應的緩存對象從緩存中刪除。

DefaultExternalAuthenticationSource<TTenant, TUser>/IExternalAuthenticationSource<TTenant, TUser>:通過外部身份認證源(比如Facebook)的認證信息創建User.

PermissionChecker:繼承自IPermissionChecker,檢查user是否被授予了某個權限。

 

 

IMayHaveOrganizationUnit:如果entity可能和Organization有關聯,就可以考慮實現該接口。

IMustHaveOrganizationUnit:如果entity一定和Organization有關聯,就可以考慮實現該接口。

 

IOrganizationUnitSettings:定義了一項和OrganizationUnit相關的設置:MaxUserMembershipCount,以及獲取和修改MaxUserMembershipCount的方法。

OrganizationUnitSettings:通過settingManager實現了IOrganizationUnitSettings定義的屬性和方法

 

OrganizationUnitManager:實現與OrganizationUnit相關的領域邏輯。使用IRepository<OrganizationUnit, long>實例完成OrganizationUnit實體的CRUD操作。

 

IdentityFrameworkClaimsAbpSession : 繼承自ClaimsAbpSession。通過 ASP.NET Identity framework接口獲取當前用戶的userID

 

IdentityResultExtensions:為ASP.NET Identity 的IdentityResult類型添加了如下的擴展方法。這些方法主要用於本地化error message.

 

IdentityResultExtensions定義了一個用於map消息和本地化資源文件中key的字典對象這個字典對象幫助獲取消息的本地化后的消息。

 

返回ABP源碼分析系列文章目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM