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的字典對象,這個字典對象幫助獲取消息的本地化后的消息。