实现对ASP.NETMvc及Asp.NetCore的权限控制
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
Nuget Package https://www.nuget.org/packages/WeihanLi.AspNetMvc.AccessControlHelper/
安装权限控制组件
WeihanLi.AspNetMvc.AccessControlHelperasp.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和NoAccessControlFilter 来控制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: weihanli@outlook.com
实现对ASP.NETMvc及Asp.NetCore的权限控制的更多相关文章
- WCF、WebAPI、WCFREST和Web服务的差异 ASP.NETMVC和ASP.NETWebAPI的差异
WCF.WebAPI.WCFREST和Web服务的差异: Web服务 它是基于SOAP和XML的形式返回数据. 它仅支持HTTP协议. 它是开放源,但是不消耗任何客户端可以同时理解XML. 它可以仅在 ...
- ASP.NET对HTML元素进行权限控制(二)
这是这个权限控制的第一步,扫描界面把要分配权限的元素的信息获取出来存入到数据库中. 这一步分三小步: (1).标出界面所要分配权限的元素 (2).扫描界面获取所要分配权限的元素信息.(ID,标题,层级 ...
- ASP.NET MVC 和 WebForm的权限控制
今天主要讲一下对于ASP.NET的页面级权限控制 数据结构:用户表.角色表.权限表.角色权限派生表 为用户添加权限的数据配置后, 自定义类对MVC继承Controller 对其内置方法Initiali ...
- asp.net-mvc验证码 asp.net-mvc c#验证码
验证码看不清换一组 写一个类 public class ValidateCode { public ValidateCode() { } /// <summary> /// 验证码的最大长 ...
- ASP.NET对HTML元素进行权限控制(三)
上一篇博客中有些没有考虑到的东西这次更改一下代码如下: 界面前台: <%@ Page Language="C#" AutoEventWireup="true&quo ...
- ASP.NET MVC使用过滤器进行权限控制
1.新建MVC项目 2.找到Models文件夹,新建 LoginCheckFilterAttribute 类 public class LoginCheckFilterAttribute : Acti ...
- ASP.NET对HTML元素进行权限控制(一)
一个HTML页面有很多的元素比如<DIV>,<P>等.这些元素构成了HTML页面.在Web开发中权限控制是每个系统都要用到了.界面每个元素的权限也是需要控制的.比如一个查询用户 ...
- <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核
[root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...
- <实训|第九天>掌握linux中普通的权限控制和三种特殊的权限(sst),做合格的运维工程师
linux中,权限的学习是必不可少的,不论是作为一名运维工程师或者是单一的管理者,学习好linux中的权限控制,你就可以保护好自己的隐私同时规划好你所管理的一切. 权限的学习是很多的,不要认为自己已经 ...
随机推荐
- XBMC源代码分析 3:核心部分(core)-综述
前文分析了XBMC的整体结构以及皮肤部分: XBMC源代码分析 1:整体结构以及编译方法 XBMC源代码分析 2:Addons(皮肤Skin) 本文以及以后的文章主要分析XBMC的VC工程中的源代码. ...
- Django访问量和页面点击数统计
http://blog.csdn.net/pipisorry/article/details/47396311 下面是在模板中做一个简单的页面点击数统计.model阅读量统计.用户访问量统计的方法 简 ...
- eclipse搭建ssh后台
SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程. 第一步:准备工作. 下载好eclipse,Struts2,Spring, ...
- Android SDK下载失败的解决方法
Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...
- 嵌入式C语言查表法的项目应用
嵌入式C实战项目开发技巧:如果对一个有规律的数组表进行位移操作 就像下面的这个表 之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑 ...
- OpenGL Shader Key Points (1)
1. Shader起步 1.1. 可编程管线 仅考虑Vertex shader和fragment shader: 1.2. Shader Object 在编译阶段生成,把shader源代码编译成 ...
- Oracle Advanced Pricing White Papers
Oracle Order Management - Version 11.5.10.0 and later Oracle Advanced Pricing - Version 11.5.10 and ...
- Leetcode_198_House Robber
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47680663 You are a professional ...
- java 调用JRuby
1.core package vanilla; import org.jruby.embed.ScriptingContainer; public class HelloWorld { private ...
- 【49】java内部类剖析
什么是内部类: 定义在其他类(outer class)中的类被称作内部类.内部类可以有访问修饰服,甚至可以被标记为 abstract 或 final. 内部类与外部类实例有特殊的关系,这种关系允许内部 ...