有個需求,就是在. NET Core中,我們想在項目 啟動時,擷取LinCmsAuthorizeAttribute這個特性标簽所有出現的地方,把他的參數,放入一個集合并緩存起來,以便後面使用此資料用于權限驗證。
我們通過反射擷取所有控制器下及方法的Attribute。
其代碼非常簡單,用于自定義權限驗證,通過重寫OnAuthorizationAsync方法,實作固定權限可配置設定給動态角色(也能配置設定給動态使用者)。主要就基于權限的授權的實作進行研究,實作方法級别的權限驗證。
https://www.cnblogs.com/RainingNight/p/dynamic-authorization-in-asp-net-core.html
當然,這個隻是部分代碼,完整代碼請檢視最下方開源位址,其中LinCmsAuthorizeAttribute繼承AuthorizeAttribute,擁有指定角色權限控制,當Permission未指定時,當過濾器與Authorize功能相同。Module是指子產品,即多個權限,屬于同一個子產品,友善前台展示為樹型結構。Permission屬性的值不可重複。
在 LinCms.Web中的Controller,至于為什麼Permission為中文,目前的主要原因,此項目用于适配 Lin-CMS-VUE項目,是以于平常我們以某個字元串作為權限名不同,但不須大精小怪,道理相同。
in xunit test 項目工程中,開始我們的測試
可在輸出文本中檢視,正是我們想要的東西,最後一行,是其他Controller中的内容,而且我們重寫了ToString(),是以我們能看到其屬性。
隻有AdminController加了此标簽,是以隻有一行。
此時Roles為Administrator,Permission及Module都是null,
這是因為隻有AdminController中加了LinGroup.Administrator="Administrator"字元串,在登入過程中,已經給目前登入使用者設定了 new Claim(ClaimTypes.Role,user.IsAdmin()?LinGroup.Administrator:user.GroupId.ToString()),即"Administrator,當使用者通路AdminController中的方法時,LinCmsAuthorize并沒有做相關驗證,都是AuthorizeAttribute,實作了固定角色權限的判斷及登入的判斷。LinCmsAuthorize完成了固定權限設定為不同的動态角色後,判斷使用者是否擁有此權限。
c# – 如何在asp. net core rc2中擷取控制器的自定義屬性 https://codeday.me/bug/20181207/453278.html
github.com/luoyunchong/lin-cms-dotnetcore
作者:
、天上有木月OvO
出處:https://cnblogs.com/igeekfan
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如有問題或建議,請多多賜教,非常感謝。