使用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的执行按钮,就可以在浏览器上看到预设的首页内容。

变更角色的权限

  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. [ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)

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

  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. SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建

    SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...

  5. 在ASP.NET MVC5中建置以角色为基础的授权机制

    在前一篇贴文中,已探索过如何在MVC5中自定ASP.NET Identity,接下来要来试试在MVC5中如何运用 ASP.NET Identity来设定一个以 "角色"为基础的授权 ...

  6. Microsoft.AspNet.Identity 自定义使用现有的表—登录实现

    Microsoft.AspNet.Identity是微软新引入的一种membership框架,也是微软Owin标准的一个实现.Microsoft.AspNet.Identity.EntityFrame ...

  7. 从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构

    Microsoft.AspNet.Identity简介 Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的mem ...

  8. Asp.net Identity 系列之 怎样修改Microsoft.AspNet.Identity.EntityFramework.IdentityUser 的 Id 字段的数据类型

    这篇博客我们来学习如何将AspNetUsers 表的Id 字段 的类型由nvarchar(128) 改为Int 并且子增长 1.为什么要修改 如果你运行过 Asp.net mvc 示例项目,你好会发现 ...

  9. AspNet Identity 和 Owin 谁是谁

    英文原文:http://tech.trailmax.info/2014/08/aspnet-identity-and-owin-who-is-who/ 最近我发现Stackoverflow上有一个非常 ...

随机推荐

  1. POJ1836 - Alignment(LIS)

    题目大意 一队士兵排成一条直线,问最少出队几个士兵,使得队里的每个士兵都可以看到又端点或者左端点 题解 从左往右搞一遍LIS,然后从右往左搞一遍LIS,然后枚举即可... 代码: #include&l ...

  2. [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5 - 摘自网络

    官方: Applies To: Windows 8, Windows 8.1 For a Windows Server® 2012 core installation that is not conn ...

  3. CentOS搭建VSFTP

    1.先看看有没有安装 rpm -qa | grep vsftpd 如果没有提示,说明没有安装.接下来,我们安装一个ftp. 2.yum安装vsftpd: yum -y install vsftpd 安 ...

  4. Combobox 成员添加

    this.comboBox1.Items.AddRange(new object[] {"Item 1", "Item 2", "Item 3&quo ...

  5. poj 1236 Network of Schools【强连通求孤立强连通分支个数&&最少加多少条边使其成为强连通图】

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13800   Accepted: 55 ...

  6. Eclipse开发PHP环境配置

    首先准备好软件: 1. Apache,到这里找个最新版本 2. PHP,到这里下载 3. Eclipse IDE for Java EE Developers,到这里下载 4. DLTK Core F ...

  7. java和c#md5加密不同

    java的mad5加密后为32位字符串,c#直接加密后可能不是32位,位数也不确定. 普通的写法 public static string Md5(string sourcein) { var md5 ...

  8. csdn博客又開始更新了

    csdn博客经过两年多的沉寂又開始更新了,这两年偶尔在http://www.cnblogs.com/JerryWang1991/ 写一些博文,写的也比較少,如今工作一年多了,又開始回到csdn上更新. ...

  9. How Network Load Balancing Technology Works--reference

    http://technet.microsoft.com/en-us/library/cc756878(v=ws.10).aspx In this section Network Load Balan ...

  10. UPDATE sql 优化

    一个网友说他的存储过程中有一段update sql,运行了15分钟还没出结果,需要优化一下 他把sql发给我 UPDATE TB_RESULT R SET R.VOTE_COUNT=NVL(( SEL ...