[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() { ... }
    }
  • 权限属于哪个角色

  • 使用者属于哪个角色

安装

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

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

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

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

  5. 回到Visual Studio开启项目中的HomeController,可以看到预设权限可以使用哪些功能的程序代码。

    public class HomeController : Controller
    {
    [RBACAuthorize(Permission = "AboutAccess")]
    public ActionResult Contact() { ... } [RBACAuthorize(Permission = "ContactAccess")]
    public ActionResult Contact() { ... }
    }

变更角色的权限

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

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

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

变更使用者的角色

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

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

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

新增系统的权限

  1. 回到Visual Studio编辑新功能,首先在HomeController增加一个新功能「News」、设定NewsAccess权限可以使用这个功能,并且在Viwes里面加上对应的变更。

    public class HomeController : Controller
    {
    [RBACAuthorize(Permission = "NewsAccess")]
    public ActionResult News()
    {
    ViewBag.Message = "Your news page."; return View();
    }
    }
  2. 按下Visual Studio的执行按钮,可以在浏览器上看到预设的首页内容,并且内容中多了一个名称为News的页面选单按钮。

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

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

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

程序代码下载

程序代码下载:点此下载

[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)的更多相关文章

  1. 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)

    使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC) 程序代码下载 程序代码下载:点此下载 前言 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.N ...

  2. [ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能

    [ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能 CLK.AspNet.Identity CLK.AspNet.Identity是一个基于ASP.NE ...

  3. [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity

    项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...

  4. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...

  5. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理 【转】

    http://www.cnblogs.com/powertoolsteam/p/MVC_five.html 系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会 ...

  6. ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)

    目的 当我们新建asp.net mvc 项目时,我们在使用下图所示的代码是否有以下思考: 1,在this.User.Identity.Name,为什么可以使用this便可以选中Name属性: 2,若项 ...

  7. 【ASP.Net MVC】在AspNet Mvc使用JQuery AutoComplete组件

    在AspNet Mvc使用JQuery AutoComplete组件 官方文档: http://api.jqueryui.com/autocomplete/#entry-examples 要使用JQu ...

  8. ASP.Net Mvc实现自定义User Identity用户身份识别系统(2)

    上一篇博文中已经实现了如何在页面上使用自定义的属性即上篇博文所示的@this.U,今天将进一步研究用户自定义User Identity; 实现思路: 通过研究微软自带identity的套路,我们可以发 ...

  9. 【ASP.Net MVC】在AspNet Mvc使用Ajax

    目录 一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 1.2 System.Web.Mvc.Ajax.ActionLink 二.手工 ...

随机推荐

  1. java之final关键字

    final关键字(可以读不可以写.只读) 1.final的变量的值不能够被改变 ①.final的成员变量 ②.final的局部变量(形参) //意思是“实参”一旦传进我的方法里面,就不允许改变 2.f ...

  2. 客户端cmd打开mysql,执行插入中文报错或插入中文乱码解决方案

    最近在制作一个安装包,需要安装的时候执行mysql脚本儿,做了一个批处理,但是发现总是执行到 插入中文的时候报错,或者插入中文是乱码. 网上查了好多资料,说是把编码改成GBK什么的,终究还是不成功. ...

  3. make no mistake, we are the last line of defense.

    make no mistake, we are the last line of defense.

  4. Cobbler批量安装Ubuntu/CentOS系统

    2013-07-25    一.安装和修改cobbler配置 1. Cobbler不在CentOS的基本源中,需要导入EPEL源升级软件包, 确保epel-release包的版本为最新,当前最新版本为 ...

  5. toad 常用快捷键与配置

    F8 调出以前执行的sql命令 F9 执行全部sql Ctrl+. 补全table_name Ctrl+t 补全table_name,或者显示字段 alt+ 箭头上下 看sql history Ctr ...

  6. 解决访问StackOverFlow太慢的问题

    Stackoverflow加载时访问了被屏蔽的站点ajax.googleapis.com,导致加载缓慢,把这个站点加到Hosts里,指向127.0.0.1即可

  7. C#基础总结之四List-Hashtable-冒泡排序

    #region 第四天作业 名片--------ArrayList //ArrayList card = new ArrayList(); //card.Add("2202111001122 ...

  8. MyBatis知多少(10)应用程序数据库

    应用程序数据库往往是最小.最简单.也最易于使用的数据库.这种数据库往往是我们这些开发人员通常不介意使用甚至非常乐意使用的.应用程序数据库通常与我们的应用程序处于同一个项目中,两者一齐设计和实现.正是因 ...

  9. 自己动手搭建 CAS(Central Authentication Service) 环境,为了单点登录(Single Sign On , 简称 SSO )

    介绍 刚刚搭建 CAS 成功了,现在记录下来,怕以后忘记,同时也给需要帮助的人.CAS 搭建需要服务端和客户端,服务端是 Java 写的,如果自己搭建则需要安装与配置 Java 环境.客户端可以是多种 ...

  10. 编写高质量JS代码的68个有效方法(十二)

    No.56.避免不必要的状态 Tips: 尽可能地使用无状态的API 如果API是有状态的,标示出每个操作与哪些状态有关联 无状态的API简洁,更容易学习和使用,也不需要考虑其他的状态.如: 'tes ...