AccessControlHelper

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

    示例代码:

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

    • 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>();
  4. 控制 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();
    }
  5. 控制页面元素的显示

    为了使用比较方便,建议在页面上导入命名空间,具体方法如下,详见 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 &raquo;", "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: weihanli@outlook.com

实现对ASP.NETMvc及Asp.NetCore的权限控制的更多相关文章

  1. WCF、WebAPI、WCFREST和Web服务的差异 ASP.NETMVC和ASP.NETWebAPI的差异

    WCF.WebAPI.WCFREST和Web服务的差异: Web服务 它是基于SOAP和XML的形式返回数据. 它仅支持HTTP协议. 它是开放源,但是不消耗任何客户端可以同时理解XML. 它可以仅在 ...

  2. ASP.NET对HTML元素进行权限控制(二)

    这是这个权限控制的第一步,扫描界面把要分配权限的元素的信息获取出来存入到数据库中. 这一步分三小步: (1).标出界面所要分配权限的元素 (2).扫描界面获取所要分配权限的元素信息.(ID,标题,层级 ...

  3. ASP.NET MVC 和 WebForm的权限控制

    今天主要讲一下对于ASP.NET的页面级权限控制 数据结构:用户表.角色表.权限表.角色权限派生表 为用户添加权限的数据配置后, 自定义类对MVC继承Controller 对其内置方法Initiali ...

  4. asp.net-mvc验证码 asp.net-mvc c#验证码

    验证码看不清换一组 写一个类 public class ValidateCode { public ValidateCode() { } /// <summary> /// 验证码的最大长 ...

  5. ASP.NET对HTML元素进行权限控制(三)

    上一篇博客中有些没有考虑到的东西这次更改一下代码如下: 界面前台: <%@ Page Language="C#" AutoEventWireup="true&quo ...

  6. ASP.NET MVC使用过滤器进行权限控制

    1.新建MVC项目 2.找到Models文件夹,新建 LoginCheckFilterAttribute 类 public class LoginCheckFilterAttribute : Acti ...

  7. ASP.NET对HTML元素进行权限控制(一)

    一个HTML页面有很多的元素比如<DIV>,<P>等.这些元素构成了HTML页面.在Web开发中权限控制是每个系统都要用到了.界面每个元素的权限也是需要控制的.比如一个查询用户 ...

  8. <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核

    [root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...

  9. <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师

    linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...

随机推荐

  1. VS2010中NET4项目中使用LOG4NET办法

    两年以前项目中是用的log4net.dll是net2.0环境下面的,最近在官网http://logging.apache.org/log4net/download_log4net.cgi找到了net4 ...

  2. JQuery实战总结一 可编辑的表格

    JQuery视频看完了,总结学习,记得在牛腩视频中的修改新闻类别的时候也使用了这样的可编辑的表格,使用到 了ajax控制界面不再刷新,轻松解决了类别的名称的修改的问题,直接提交到数据库,这样的方式比起 ...

  3. android图片加载库Glide

    什么是Glide? Glide是一个加载图片的库,作者是bumptech,它是在泰国举行的google 开发者论坛上google为我们介绍的,这个库被广泛的运用在google的开源项目中. Glide ...

  4. Android 获取某apk的签名信息,可用作防盗版进入。

    转载请标明出处:  http://write.blog.csdn.net/postedit/45721779作者:skay 一般项目中有防盗版的需求,必须是正版软件才能使用,这就需要获取当前安装包的签 ...

  5. windows linux—unix 跨平台通信集成控制系统

    首先,我们可以用到这个开源的开发包: mdk(Micro-Development-Kit)微量级软件开发包,提供几个常用类,主要实现了一个高性能的并发服务器引擎 使用c++开发,是一个跨平台的开发包, ...

  6. C语言之将无符号字符型转化为ascii码值

    这个宏是在linux内核中获取的,主要的功能是能够将一个无符号字符型的参数转化为ASCII码值. ASCII : ASCII 编码里包括了128个字符.用 十进制 0  到 127 来表示 .那就对了 ...

  7. Java进阶(十六)使用new Date()和System.currentTimeMillis()获取当前时间戳

    java使用new Date()和System.currentTimeMillis()获取当前时间戳 在开发过程中,通常很多人都习惯使用new Date()来获取当前时间,使用起来也比较方便,同时还可 ...

  8. Android群英传笔记——第五章:Android Scroll分析

    Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...

  9. 苹果新的编程语言 Swift 语言进阶(八)--属性

    属性是特定类.结构或枚举的相关值,属性根据作用域不同分为实例属性与类型属性,还可以根据是否存储分为存储属性和计算属性. 1.1 实例属性 为一个类.结构或枚举定义的属性默认属于实例属性,即该属性属于为 ...

  10. JS实现鼠标滚动事件,兼容IE9,FF,Chrome.

    <!-- 废话不多说,直接贴代码 --><script type="text/javascript" src="jquery.min.js"& ...