項目基於 .NETStandard,同時支持 asp.net mvc(.NET faremwork4.5以上) 和 asp.net core 項目(asp.net 2.0以上),基於 ASP.NET MVC 和 ASP.NET Core 實現的對 `Action` 的訪問控制以及頁面元素的許可權控制。 ...
AccessControlHelper
Build Status
Intro
由於項目需要,需要在 基於 Asp.net mvc 的 Web 項目框架中做許可權的控制,於是才有了這個許可權控制組件。
項目基於 .NETStandard,同時支持 asp.net mvc(.NET faremwork4.5以上) 和 asp.net core 項目(asp.net 2.0以上),基於 ASP.NET MVC 和 ASP.NET Core 實現的對 Action
的訪問控制以及頁面元素的許可權控制。
GetStarted
安裝許可權控制組件 WeihanLi.AspNetMvc.AccessControlHelper
asp.net:
Install-Package WeihanLi.AspNetMvc.AccessControlHelper
asp.net core:
dotnet add package WeihanLi.AspNetMvc.AccessControlHelper
實現自己的許可權控制顯示策略類
- 實現頁面元素顯示策略介面
IControlAccessStrategy
- 實現
Action
訪問顯示策略介面IActionAccessStrategy
示例代碼:
ASP.NET Mvc
ASP.NET Core
- 實現頁面元素顯示策略介面
程式啟動時註冊自己的顯示策略
- asp.net mvc
可基於Autofac實現的依賴註入,在 autofac 的 Ioc Container中註冊顯示策略,並返回一個可以從Ioc Container中獲取對象的委托或者實現
IServiceProvider
介面的對象,參考:https://github.com/WeihanLi/AccessControlHelper/blob/master/samples/PowerControlDemo/Global.asax.cs#L23//autofac ContainerBuilder var builder = new ContainerBuilder(); // etc... // register accesss control builder.RegisterType<ActionAccessStrategy>().As<IActionAccessStrategy>(); builder.RegisterType<ControlAccessStrategy>().As<IControlAccessStrategy>(); var container = builder.Build(); // Important AccessControlHelper.RegisterAccessControlHelper<ActionAccessStrategy, ControlAccessStrategy>(type => container.Resolve(type));
- asp.net core
在
Startup
文件中註冊顯示策略,參考https://github.com/WeihanLi/AccessControlHelper/blob/master/samples/AccessControlDemo/Startup.cs// Configure app.UseAccessControlHelper(); // ConfigureServices services.AddAccessControlHelper<ActionAccessStrategy, ControlAccessStrategy>();
控制
Action
的方法許可權通過
AccessControl
和NoAccessControl
Filter 來控制Action
的訪問許可權,如果Action上定義了NoAccessControl
可以忽略上級定義的AccessControl
,另外可以設置 Action 對應的AccessKey
使用示例:
[NoAccessControl] public IActionResult Index() { return View(); } [AccessControl] public IActionResult About() { ViewData["Message"] = "Your application description page."; return View(); } [AccessControl(AccessKey = "Contact")] public IActionResult Contact() { ViewData["Message"] = "Your contact page."; return View(); }
控制頁面元素的顯示
為了使用比較方便,建議在頁面上導入命名空間,具體方法如下,詳見 Samples:
asp.net mvc
在 項目的 Views 目錄下的 web.config 文件中添加命名空間
WeihanLi.AspNetMvc.AccessControlHelper
<system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="PowerControlDemo" /> <add namespace="WeihanLi.AspNetMvc.AccessControlHelper" /><!-- add WeihanLi.AspNetMvc.AccessControlHelper--> </namespaces> </pages> </system.web.webPages.razor>
asp.net core
在 Views 目錄下的 **_ViewImports.cshtml** 中引用命名空間
WeihanLi.AspNetMvc.AccessControlHelper
@using AccessControlDemo @using WeihanLi.AspNetMvc.AccessControlHelper// add WeihanLi.AspNetMvc.AccessControlHelper @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
通過
HtmlHelper
擴展方法來實現許可權控制SparkContainer
@using(Html.SparkContainer("div",new { @class="container",custom-attribute = "abcd" })) { @Html.Raw("1234") } @using (Html.SparkContainer("span",new { @class = "custom_p111" }, "F7A17FF9-3371-4667-B78E-BD11691CA852")) { @:12344 }
沒有許可權訪問就不會渲染到頁面上,有許可權訪問的時候渲染得到的 Html 如下:
<div class="container" custom-attribute="abcd">1234</div> <span class="custome_p111">12344</span>
SparkLink
@Html.SparkLink("Learn about me »", "http://weihanli.xyz",new { @class = "btn btn-default" })
有許可權訪問時渲染出來的 html 如下:
<a class="btn btn-default" href="http://weihanli.xyz">Learn about me »</a>
SparkButton
@Html.SparkButton("12234", new { @class= "btn btn-primary" })
有許可權訪問時渲染出來的 html 如下:
<button class="btn btn-primary" type="button">12234</button>
Contact
如果您在使用中遇到了問題,歡迎隨時與我聯繫。
Contact me: [email protected]