[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
程序代码下载
程序代码下载:点此下载
前言
ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.NET的验证、授权机制。而在ASP.NET Identity的功能模块中:是采用Claims-Based验证来提供验证机制、并且实作Role-Based授权来提供授权机制。开发人员在系统内套用ASP.NET Identity后,就可以像下列范例一样定义用户属于哪个角色、哪个角色可以使用那些功能,后续用户通过验证之后,就可以依照角色授权来使用系统功能。
ASP.NET Identity授权机制,可以在系统运行中动态变更用户所属的角色,但是却不能动态变更角色可以使用的功能。这是因为在ASP.NET Identity里,使用者属于哪个角色的设定储存于数据库可以动态变更,而角色可以使用那些功能的设定则是定义在程序代码没有办法动态变更。虽然这样的授权机制已经可以符合大部分的开发需求,但在需要动态变更角色使用那些功能的开发项目中,开发人员就没有机会使用到ASP.NET Identity丰富的验证授权机制。
领域模型

角色可以使用那些功能
public class HomeController : Controller
{
[Authorize(Roles = "Admin")]
public ActionResult Contact() { ... } [Authorize(Roles = "Guest")]
public ActionResult Contact() { ... }
}
使用者属于哪个角色

本篇文章介绍一个基于ASP.NET Identity开发设计的验证授权模块:CLK.AspNet.Identity。这个验证授权模块提供以角色为基础的访问控制(Role-based access control, RBAC),将系统授权拆解为User(使用者)、Role(角色)、Permission(权限)。开发人员在系统内套用CLK.AspNet.Identity后,就可以像下列范例一样定义用户属于哪个角色、哪个角色拥有那些权限、权限可以使用哪些功能,后续用户通过验证之后,就可以依照角色权限来使用系统功能。
CLK.AspNet.Identity授权机制,除了可以继续使用继承自ASP.NET Identity的Claims-Based验证机制之外,也可以在系统运行中动态变更储存于数据库的授权设定:使用者所属的角色、角色拥有的权限,让系统的授权设定更加灵活多变,用以满足更多的用户需求。
领域模型

权限可以使用哪些功能
public class HomeController : Controller
{
[RBACAuthorize(Permission = "AboutAccess")]
public ActionResult Contact() { ... } [RBACAuthorize(Permission = "ContactAccess")]
public ActionResult Contact() { ... }
}
权限属于哪个角色

使用者属于哪个角色

安装
首先开启Visual Studio建立一个「完全空白」的ASP.NET Web 应用程序。


接着开启NuGet管理工具,搜寻并安装:「CLK.AspNet.Identity.Mvc Template」

安装需要花费一些时间,安装完毕后即可看到必要档案都已加入至项目。

安装好CLK.AspNet.Identity之后,按下Visual Studio的执行按钮,就可以在浏览器上看到预设的首页内容。

回到Visual Studio开启项目中的HomeController,可以看到预设权限可以使用哪些功能的程序代码。
public class HomeController : Controller
{
[RBACAuthorize(Permission = "AboutAccess")]
public ActionResult Contact() { ... } [RBACAuthorize(Permission = "ContactAccess")]
public ActionResult Contact() { ... }
}
变更角色的权限
使用预设的访客账号登入(ID:guest@example.com, PW:guest),点击页面选单按钮:About,因为guest@example.com属于Guest群组、而Guest群组没有AboutAccess权限,所以会收到403拒绝访问的页面内容。



使用预设的管理账号登入(ID:admin@example.com, PW:admin),点击页面选单按钮:PermissionsAdmin进入权限管理页面,编辑AboutAccess权限,让Guest群组拥有AboutAccess权限。


更换回预设的访客账号登入(ID:guest@example.com, PW:guest),点击页面选单按钮:About,因为现在Guest群组拥有AboutAccess权限,所以可以浏览About页面内容。

变更使用者的角色
使用预设的访客账号登入(ID:guest@example.com, PW:guest),点击页面选单按钮:Contact,因为guest@example.com属于Guest群组、而Guest群组没有ContactAccess权限,所以会收到403拒绝访问的页面内容。



使用预设的管理账号登入(ID:admin@example.com, PW:admin),点击页面选单按钮:UsersAdmin进入使用者管理页面,编辑guest@example.com使用者,让guest@example.com使用者加入到Admin群组。


更换回预设的访客账号登入(ID:guest@example.com, PW:guest),点击页面选单按钮:Contact,因为现在guest@example.com属于Admin群组,而Admin群组拥有ContactAccess权限,所以可以浏览Contact页面内容。

新增系统的权限
回到Visual Studio编辑新功能,首先在HomeController增加一个新功能「News」、设定NewsAccess权限可以使用这个功能,并且在Viwes里面加上对应的变更。
public class HomeController : Controller
{
[RBACAuthorize(Permission = "NewsAccess")]
public ActionResult News()
{
ViewBag.Message = "Your news page."; return View();
}
}
按下Visual Studio的执行按钮,可以在浏览器上看到预设的首页内容,并且内容中多了一个名称为News的页面选单按钮。

使用预设的访客账号登入(ID:guest@example.com, PW:guest),点击页面选单按钮:News,这时因为系统里没有设定NewsAccess权限,所以会收到PermissionName not found.的错误讯息页面。



使用预设的管理账号登入(ID:admin@example.com, PW:admin),点击页面选单按钮:PermissionsAdmin进入权限管理页面,新增NewsAccess权限,并且让Guest群组拥有NewsAccess权限。


更换回预设的访客账号登入(ID:guest@example.com, PW:guest),点击页面选单按钮:News,因为现在Guest群组拥有NewsAccess权限,所以可以浏览News页面内容。

程序代码下载
程序代码下载:点此下载
[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)的更多相关文章
- 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC) 程序代码下载 程序代码下载:点此下载 前言 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.N ...
- [ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能
[ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能 CLK.AspNet.Identity CLK.AspNet.Identity是一个基于ASP.NE ...
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_five.html 系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会 ...
- ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)
目的 当我们新建asp.net mvc 项目时,我们在使用下图所示的代码是否有以下思考: 1,在this.User.Identity.Name,为什么可以使用this便可以选中Name属性: 2,若项 ...
- 【ASP.Net MVC】在AspNet Mvc使用JQuery AutoComplete组件
在AspNet Mvc使用JQuery AutoComplete组件 官方文档: http://api.jqueryui.com/autocomplete/#entry-examples 要使用JQu ...
- ASP.Net Mvc实现自定义User Identity用户身份识别系统(2)
上一篇博文中已经实现了如何在页面上使用自定义的属性即上篇博文所示的@this.U,今天将进一步研究用户自定义User Identity; 实现思路: 通过研究微软自带identity的套路,我们可以发 ...
- 【ASP.Net MVC】在AspNet Mvc使用Ajax
目录 一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 1.2 System.Web.Mvc.Ajax.ActionLink 二.手工 ...
随机推荐
- Untracked files不想add
$ git status On branch feature/20160420_complain_630222 Untracked files: (use "git add <file ...
- C++ Copy Elision
故事得从 copy/move constructor 说起: The default constructor (12.1), copy constructor and copy assignment ...
- C#基础总结之八面向对象知识点总结-继承与多态-接口
.方法深入讲解(返回值,形参与实参) 方法 public int getName(int i,int j) { int sum = i + j; return sum; } .利用泛型存储对象数据 . ...
- 理解 JS 回调函数中的 this
任何变量或对象都有其赖以生存的上下文.如果简单地将对象理解为一段代码,那么对象处在不同的上下文,这段代码也会执行出不同的结果. 例如,我们定义一个函数 getUrl 和一个对象 pseudoWindo ...
- 前端模块化:RequireJS
前言 前端模块化能解决什么问题? 模块的版本管理 提高可维护性 -- 通过模块化,可以让每个文件职责单一,非常有利于代码的维护 按需加载 -- 提高显示效率 更好的依赖处理 -- 传统的开发模式,如果 ...
- 【转载】Linux下编辑生成.mo文件
转载自:http://www.hackbase.com/tech/2012-02-27/65972.html 编辑生成.mo文件 我们在弄网站的时候很可能会接触到.mo和.po文件..po文件是GNU ...
- Android注解编程的第一步---模仿ButterKnife的ViewBinder机制
ButterKnife的使用极大方便了Android程序员的开发,实际上,我们可以自己模仿一下实现. 首先就是要了解Java注解的使用. 我们首先要声明一个@interface,也就是注解类: @Ta ...
- 为什么NOLOCK查询提示是个不明智的想法
一些人总当NOLOCK查询提示是SQL Server里的加速器,因为它避免了大量的死锁情景.在这篇文章里,我想向你展示下为什么NOLOCK查询提示是个不好的想法. 脏读(Dirty Reads) NO ...
- Week2 Bing词典Android客户端案例分析
一.软件调研 运行平台:Android 4.4.4 必应版本:5.2.2 1.bug发现 1.1 bug标题:单词挑战无法加载和刷新 bug详细描述:学习界面中的单词挑战模块,点击后没有任何反映,并且 ...
- 关于 getWriter() has already been called for this response 的错误解决办法
java.lang.IllegalStateException: getWriter() has already been called for this response 今天在做显示图片的时候,( ...