基于.netstandard的权限控制组件

基于.netstandard的权限控制组件

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

  1. Nuget Package https://www.nuget.org/packages/WeihanLi.AspNetMvc.AccessControlHelper/

    安装权限控制组件 WeihanLi.AspNetMvc.AccessControlHelper

    asp.net:

    Install-Package WeihanLi.AspNetMvc.AccessControlHelper
    

    asp.net core:

    dotnet add package WeihanLi.AspNetMvc.AccessControlHelper
    
  2. 实现自己的权限控制显示策略类

    • 实现页面元素显示策略接口 IControlAccessStrategy
    • 实现 Action 访问显示策略接口 IActionAccessStrategy

    示例代码:

    • ASP.NET Mvc

      1. AccessStragety
    • ASP.NET Core

      1. ActionAccessStragety

      2. ControlAccessStrategy

  1. 程序启动时注册自己的显示策略

    • asp.net mvc

    基于Autofac实现的依赖注入,在autofac的Ioc Container中注册显示策略,参考:https://github.com/WeihanLi/AccessControlHelper/blob/master/samples/PowerControlDemo/Global.asax.cs#L23

    //autofac ContainerBuilder
    var builder = new ContainerBuilder();
    // etc...
    
    // register accesss control
    builder.RegisterAccessControlHelper();
    
    • asp.net core

    Startup 文件中注册显示策略,参考https://github.com/WeihanLi/AccessControlHelper/blob/master/samples/AccessControlDemo/Startup.cs

    // Configure
    app.UseAccessControlHelper();
    
    // ConfigureServices
    services.AddAccessControlHelper();
    
  1. 控制 Action 的方法权限

    通过 AccessControlNoAccessControl 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();
    }
    
  2. 控制页面元素的显示

    为了使用比较方便,建议在页面上导入命名空间,具体方法如下,详见 Samples:

    • asp.net mvc

      在 项目的 Views 目录下的 web.config 文件中添加命名空间 WeihanLi.AspNetMvc.AccessControlHelper

      
          
              
                  
                  
                  
                  
                  
                  
                  
              
          
      
      
    • 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` 使用

   ``` csharp
   @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 如下:

   ``` html
   
1234
12344 ``` - `SparkLink` ``` csharp @Html.SparkLink("Learn about me »", "http://weihanli.xyz",new { @class = "btn btn-default" }) ``` 有权限访问时渲染出来的 html 如下: ``` html Learn about me » ``` - `SparkButton` ``` csharp @Html.SparkButton("12234", new { @class= "btn btn-primary" }) ``` 有权限访问时渲染出来的 html 如下: ``` html ```

Contact

如果您在使用中遇到了问题,欢迎随时与我联系。

Contact me: [email protected]

你可能感兴趣的:(基于.netstandard的权限控制组件)