什么是Identity
ASP.NET Identity是構建核心 Web 應用程式(ASP.NET、登錄和用戶資料)的成員系統,ASP.NET核心標識允許您向應用程式添加登錄功能,并可以輕松自定義有關登錄用戶的資料,
原始碼鏈接 Github鏈接

用我的話說就是一個權限管理模塊,可以提供使用ef持久化儲存資料的功能,包含了用戶管理,角色管理,用戶憑證管理,角色憑證管理,以及各種第三方登錄儲存,
原始碼結構
原始碼主要包含一些介面定義,然后就是介面的封裝,在這里我推薦一篇很不錯的文章,比我講的都要詳細,
感覺不錯的文章
我們來看看原始碼結構

Microsoft.Extensions.Identity.Stores 和 Microsoft.Extensions.Identity.Core里面的代碼是重點 尤其是Microsoft.Extensions.Identity.Core里的那些定義的介面
- IQueryableRoleStore
- IQueryableUserStore
- IRoleClaimStore
- IRoleStore
- IUserAuthenticationTokenStore
- IUserClaimStore
- IUserEmailStore
- IUserLockoutStore
- IUserLoginStore
- IUserPasswordStore
- IUserPhoneNumberStore
- IUserRoleStore
- IUserSecurityStampStore
- IUserStore
- IUserTwoFactorStore
我們以IuserRoleStore介面為例

IUserRoleStore繼承了IUserStore介面 好多介面都繼承了IUserStore 因為這個是關于用戶的最初的介面當其他的介面都繼承這個的時候我們可以通過定義一個子類繼承其他介面那我們就可以實作這些介面來實作具體的功能了
說到這我們就來看一個實作了功能的類

UserStoreBase這個抽象類算是繼承了好多的介面 其中就包含IQueryableUserStore介面 這個介面算是為了查找資料定義的 因為這個介面就一個Users屬性
另外的UserStore介面又繼承了這個UserStoreBase介面

說著這里的實作其實到這里整個呼叫這些實作的方法就可以用了,把他們注入到DI容器然后就可以開心的使用了,如下圖,官方就是這樣操作的,但是可能涉及的介面比較多,原始碼里就把好多的操作介面給封裝成那最經典的三個類了,

在UserStore里注入了Ef的資料背景關系,也就是說對資料庫的增刪改查在UserStore里就已經完成了,

然后就是那最重要的三個類了這三個類算是對UserStore RoleStore那些功能再次封裝了,這樣在使用方面就注入這個三個類就可以實作所有的功能了,具體的功能大家看看涉及的原始碼細節,如果有看不懂的,請看我下面的動圖示例演示代碼,對理解原始碼有幫助,
SignInManager
UserManager
RoleManager

在原始碼里使用了很多的將IUserStore轉換成其他子介面的使用方法,這大概是叫里氏替換原則吧,大家如果想實作一套自己的,可以定義好介面然后像identity這樣實作介面,然后封裝成這三個類就好了,或者封裝成其他的什么類,這三個類是在圖上的位置注入進入的,

關于權限系統的概念,我想做的系統是有三個概念,一個用戶,一個角色,一個資源,這個資源可以是宣告憑證,也可以是具體的權限,也可以是一些選單的權限,其實和identity里的claim很像,用戶可以擁有很多的角色,也可以擁有很多的資源,角色也可以擁有很多的資源,用戶的總資源等于角色資源和用戶資源的并集,
此文章算是學習筆記了,不喜歡的求輕噴,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/8158.html
標籤:.NET Core
