天天看點

.NET Core 反射擷取所有控制器及方法上特定标簽

有個需求,就是在. 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

聯系:[email protected]

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。如有問題或建議,請多多賜教,非常感謝。