【转】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源碼分析系列文章目錄
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【转】ABP源码分析四十二:ZERO的身份认证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡刷卡次数少会影响额度吗
- 下一篇: 【转】ABP源码分析三:ABP Modu