【转】ABP源码分析四十二:ZERO的身份认证
ABP Zero模塊通過自定義實(shí)現(xiàn)Asp.Net Identity完成身份認(rèn)證功能, 對(duì)Asp.Net Identity做了較大幅度的擴(kuò)展。同時(shí)重寫了ABP核心模塊中的permission功能,以實(shí)現(xiàn)授權(quán)。注意:ABP僅僅使用了Asp.Net Identity的身份認(rèn)證功能,但沒有使用Asp.Net Identity中的基于role和Claim的授權(quán)。
?
ABP Zero 中擴(kuò)展的Asp.Net Identity實(shí)體類: AbpUser, AbpRole。
AbpUser: 代表user的Entity。其實(shí)現(xiàn)了Asp.Net Identity的IUser接口。
?
AbpRole: 代表role的Entity。其實(shí)現(xiàn)了Asp.Net Identity的IRole接口。一個(gè)role代表一組權(quán)限。ABP建議檢查user的permission而非role以判斷user是否可以執(zhí)行某個(gè)操作。
?
ABP Zero 中擴(kuò)展Asp.Net Identity重管理實(shí)體的類: AbpUserStore, AbpUserManager,AbpRoleStore,AbpRoleManager。
?
AbpUserStore:主要實(shí)現(xiàn)了ASP.NET Identity Framework中與user操作相關(guān)的接口:IUserPasswordStore<TUser, long>,IUserEmailStore<TUser, long>,IUserLoginStore<TUser, long>,IUserRoleStore<TUser, long>,IQueryableUserStore<TUser, long>。
同時(shí)也實(shí)現(xiàn)了IUserPermissionStore<TTenant, TUser>接口。該類通過IRepository<TUser, long>,IRepository<UserLogin, long>,IRepository<UserRole, long>,IRepository<TRole>,IRepository<UserPermissionSetting, long>實(shí)例完成User實(shí)體的CRUD操作以及與User關(guān)聯(lián)關(guān)系的CRUD操作。
?
?
AbpUserManager:繼承擴(kuò)展了ASP.NET Identity Framework中UserManager<TUser, long>類。實(shí)現(xiàn)了與User相關(guān)的領(lǐng)域服務(wù)。?
?
AbpRoleStore:其實(shí)現(xiàn)了Asp.Net Identity的IQueryableRoleStore接口。 通過IRepository<TRole>,IRepository<UserRole, long>和IRepository<RolePermissionSetting, long>實(shí)例完成Role及與role相關(guān)的permission/user實(shí)體的CRUD操作。
?
AbpRoleManager<TTenant, TRole, TUser>:繼承自Asp.Net Identity的RoleManager<TRole, int>類。這是一個(gè)抽象類,實(shí)際項(xiàng)目需要指定具體的TTenant, TRole, TUser類型來擴(kuò)展這個(gè)抽象類。該抽象類實(shí)現(xiàn)了與Role相關(guān)的領(lǐng)域邏輯。
?
其它類
?
UserRole:實(shí)現(xiàn)了CreationAuditedEntity<long>的實(shí)體類。描述User 和 Role的關(guān)系。
?
PermissionSetting:代表user/role 和?permission的關(guān)系實(shí)體類
?
OrganizationUnit:實(shí)現(xiàn)了FullAuditedEntity<long>的實(shí)體類,用于表示Organization的實(shí)體
?
UserOrganizationUnit:實(shí)現(xiàn)了 CreationAuditedEntity<long>的實(shí)體類。表示user 和 Organization的關(guān)聯(lián)關(guān)系。
?
UserLogin:實(shí)體類用于保存通過外部授權(quán)服務(wù)授權(quán)的用戶的登入信息。
?
RolePermissionCacheItem:這個(gè)類實(shí)例被用于緩存,其HashSet<string>類型的GrantedPermissions和ProhibitedPermissions對(duì)象用于保存role的權(quán)限
?
UserPermissionCacheItem:這個(gè)類實(shí)例被用于緩存,其HashSet<string>類型的GrantedPermissions和ProhibitedPermissions對(duì)象用于保存user的權(quán)限
?
PermissionEqualityComparer?: 實(shí)現(xiàn)了IEqualityComparer<Permission>接口中的Equal和GetHashCode方法,用于比較兩個(gè)permission.
AbpRolePermissionCacheItemInvalidator:用于定義響應(yīng)RolePermissionSetting和AbpRoleBase實(shí)體改變事件的處理函數(shù)。實(shí)際完成的工作就是將相應(yīng)的緩存對(duì)象從緩存中刪除。
?
AbpUserPermissionCacheItemInvalidator:用于定義響應(yīng)UserPermissionSetting,UserRole和AbpUser實(shí)體改變事件的處理函數(shù)。實(shí)際完成的工作就是將相應(yīng)的緩存對(duì)象從緩存中刪除。
DefaultExternalAuthenticationSource<TTenant, TUser>/IExternalAuthenticationSource<TTenant, TUser>:通過外部身份認(rèn)證源(比如Facebook)的認(rèn)證信息創(chuàng)建User.
PermissionChecker:繼承自IPermissionChecker,檢查user是否被授予了某個(gè)權(quán)限。
?
?
IMayHaveOrganizationUnit:如果entity可能和Organization有關(guān)聯(lián),就可以考慮實(shí)現(xiàn)該接口。
IMustHaveOrganizationUnit:如果entity一定和Organization有關(guān)聯(lián),就可以考慮實(shí)現(xiàn)該接口。
?
IOrganizationUnitSettings:定義了一項(xiàng)和OrganizationUnit相關(guān)的設(shè)置:MaxUserMembershipCount,以及獲取和修改MaxUserMembershipCount的方法。
OrganizationUnitSettings:通過settingManager實(shí)現(xiàn)了IOrganizationUnitSettings定義的屬性和方法
?
OrganizationUnitManager:實(shí)現(xiàn)與OrganizationUnit相關(guān)的領(lǐng)域邏輯。使用IRepository<OrganizationUnit, long>實(shí)例完成OrganizationUnit實(shí)體的CRUD操作。
?
IdentityFrameworkClaimsAbpSession?: 繼承自ClaimsAbpSession。通過 ASP.NET Identity framework接口獲取當(dāng)前用戶的userID
?
IdentityResultExtensions:為ASP.NET Identity 的IdentityResult類型添加了如下的擴(kuò)展方法。這些方法主要用于本地化error message.
?
IdentityResultExtensions定義了一個(gè)用于map消息和本地化資源文件中key的字典對(duì)象,這個(gè)字典對(duì)象幫助獲取消息的本地化后的消息。
?
返回ABP源碼分析系列文章目錄
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【转】ABP源码分析四十二:ZERO的身份认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡刷卡次数少会影响额度吗
- 下一篇: 【转】ABP源码分析三:ABP Modu