1. 程式人生 > >ABP原始碼分析四十二:ZERO的身份認證

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原始碼分析ZERO身份認證

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

ABP原始碼分析ZERO的Audit,Setting,Background Job

AuditLog: 繼承自Entity<long>的實體類。封裝AuditLog的資訊。 AuditingStore: 實現了IAuditingStore介面,實現了將AuditLog的資訊儲存到資料庫的功能。其通過IRepository<AuditLog, long>例項完成對資料

ABP原始碼分析ABP.SignalR

Realtime Realtime是ABP底層模組提供的功能,用於管理線上使用者。它是使用SignalR實現給線上使用者傳送通知的功能的前提 IOnlineClient/OnlineClient: 封裝線上使用者的資訊 OnlineClientManager/IOnlineClientManager:

ABP原始碼分析ABP中的異常處理

ABP 中異常處理的思路是很清晰的。一共五種型別的異常類。 AbpInitializationException用於封裝ABP初始化過程中出現的異常,只要丟擲AbpInitializationException異常就可以,無須做額外處理。這類異常往往是需要維護人員介入分析的。 其他四個異常都在AbpCon

ABP原始碼分析ZERO的配置

ABP Zero模組中需要配置的地方主要集中在三塊:配置靜態的role,配置外部認證源,以及配置本地化語言和資源。 UserManagementConfig/IUserManagementConfig:定義了一個配置項,用於配置外部認證源。預設情況下,ABP Zero使用AbpUser表作為身份

ABP原始碼分析ZERO的Application和Tenant

ABP的Zero模組以資料庫為資料來源實現了ABP框架中的tenant management (multi-tenancy), role management, user management, session, authorization (permission management), setting m

ABP原始碼分析ABP.AutoMapper

這個模組封裝了Automapper,使其更易於使用。 下圖描述了改模組涉及的所有類之間的關係。 AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttribute:這三個attribute用於標註一個類到另外一個類的map方向。 Auto

ABP原始碼分析ABP.Web.Api

這裡的內容和ABP 動態webapi沒有關係。除了動態webapi,ABP必然是支援使用傳統的webApi。ABP.Web.Api模組中實現了一些同意的基礎功能,以方便我們建立和使用asp.net webApi。 AbpApiController:這是一個抽象基類,繼承自ApiController,是AB

ABP原始碼分析ABP中動態WebAPI原理解析

動態WebAPI應該算是ABP中最Magic的功能之一了吧。開發人員無須定義繼承自ApiController的類,只須重用Application Service中的類就可以對外提供WebAPI的功能,這應該算是對DRY的最佳詮釋了. 如下圖所示,一行程式碼就為所有實現了IApplicationService的

ABP原始碼分析ABP.Hangfire

ABP對HangFire的整合主要是通過實現IBackgroundJobManager介面的HangfireBackgroundJobManager類完成的。 HangfireBackgroundJobManager:實現了介面IBackgroundJobManager中的方法EnqueueAsync,通過

ABP原始碼分析ABP.Web.Api Script Proxy API

ABP提供Script Proxy WebApi為所有的Dynamic WebApi生成訪問這些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理。這些個代理就是javascript指令碼,通過這些代理可以簡單的訪問Dynamic webApi。 如下例項演示一個最基本的

ABP原始碼分析十三ZERO的本地化

ABP Zero模組擴充套件了ABP基礎框架中的本地化功能,實現了通過資料庫管理本地化的功能。其通過資料庫儲存本地化語言及其資源。 ApplicationLanguage:代表本地化語言的實體類。一種語言就是一個ApplicationLanguage例項。 ApplicationLanguag

ABP原始碼分析ABP.Web.Mvc

ABP.Web.Mvc模組主要完成兩個任務: 第一,通過自定義的AbpController抽象基類封裝ABP核心模組中的功能,以便利的方式提供給我們建立controller使用。 第二,一些常見的基礎功能的實現。 AbpController:這是一個抽象基類,繼承自MVC Controller,是A

ABP原始碼分析Configuration

核心模組的配置 Configuration是ABP中設計比較巧妙的地方。其通過AbpStartupConfiguration,Castle的依賴注入,Dictionary物件和擴充套件方法很巧妙的實現了配置中心化。配置中心化是一個支援模組開發的框架必備功能。 ABP中核心功能模組中的一些功能的執行時的

【Unity 3D】學習筆記粒子特效

空間 獲得 material package 一個 log 創建 spa mpi 粒子特效 粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。要使用粒子特效首先要創建,在hierarchy視圖中點擊create——particle s

opencv學習筆記稠密光流跟蹤

利用Gunnar Farneback演算法計算全域性性的稠密光流演算法(即影象上所有畫素點的光流都計算出來),由於要計算影象上所有點的光流,故計算耗時,速度慢  稠密光流需要使用某種插值方法在比較容易跟蹤的畫素之間進行插值以解決那些運動不明確的畫素 calcOpticalF

練習五家共井

五家共井,甲二綆(汲水用的井繩)不足,如(接上)乙一綆; 乙三綆不足,如丙一綆; 丙四綆不足,如丁一綆; 丁五綆不足,如戊一綆; 戊六綆不足,如甲一綆,皆及 先來翻譯下再思考: 五家人公用一口井 甲家用繩子2條不夠,需要加上乙家繩子1條才可打到井水 乙家用繩子3條不夠,需要加上丙家繩子1條才可打到井水 丙家用

UNIX v6原始碼分析除錯之單步除錯系統程式碼 main函式之 kinit1

    環境搭建完成,該學習Main.c的main函數了。先貼上main函式的實現。int main(void) { kinit1(end, P2V(4*1024*1024)); // phys page allocator kvmalloc(); // k

ABP原始碼分析八: ABP.Web.Api.OData

如果對OData不熟悉的話可參考OData的初步認識一文以獲取OData的一些初步知識。 API.Odata 模組唯一用處就是提供了一個泛型版本的ODataController,實現了Controller程式碼的常用。 AbpODataEntityController<TEntity, TPrima

論文閱讀筆記Going deeper with convolutions (Inception V1 CVPR2014 )

存在 區域 分類 論文 定位 獨立 也會 rgb 線索 論文原址:https://arxiv.org/pdf/1409.4842.pdf 代碼連接:https://github.com/titu1994/Inception-v4(包含v1,v2,v4) 摘要