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

CLK.AspNet.Identity

CLK.AspNet.Identity是一个基于ASP.NET Identity扩展设计的验证授权模块,这个模块提供以角色为基础的访问控制(Role-based access control, RBAC),将系统授权拆解为User(使用者)、Role(角色)、Permission(权限)。让开发人员可以在系统内,定义用户属于哪个角色、哪个角色拥有那些权限、权限可以使用哪些功能。后续使用者通过验证之后,就可以依照角色权限来使用系统功能。

问题情景

开发人员在系统内套用CLK.AspNet.Identity后,就可以依照使用者的权限,来限制用户能够使用那些功能。当用户透过浏览器进入权限的功能页面时,就会收到HTTP的403状态代码,用来告知使用者没有权限进入该页面。

以提供更好的使用者体验角度来说,用户点击选单项目后,得到没有权限进入该页面的响应。这样的操作流程,很容易让用户失去耐心。为了提供更好的用户体验,系统应该依用户的权限来显示选单项目,只显示有权限可以进入使用的选单项目,用以减少用户操作错误的机会。

解决方案

在套用CLK.AspNet.Identity的系统里,可以使用HasPermission这个扩充方法,来提供依权限显示选单项目的功能。使用方法如下:

  1. 在系统里加入一个新的ProductController、ProductViews,并且依照下列范例程序,加入Method及对应的权限:ProductAddAccess、ProductRemoveAccess。

    public class ProductController : Controller
    {
    [RBACAuthorize(Permission = "ProductAddAccess")]
    public ActionResult Add()
    {
    ViewBag.Message = "Your product add page.";
    return View();
    } [RBACAuthorize(Permission = "ProductRemoveAccess")]
    public ActionResult Remove()
    {
    ViewBag.Message = "Your product remove page.";
    return View();
    }
    }
  2. 编辑Views\Shared_Layout.cshtml,并且依照下列范例,使用HasPermission这个扩充方法,来依照用户的权限显示选单项目。

    <div class="col-md-12" style="background-color:#222">
    <div class="container">
    @if (User.HasPermission("ProductAddAccess"))
    {
    @Html.ActionLink("Product add", "Add", "Product", null, new { @class = "btn btn-primary" })
    } @if (User.HasPermission("ProductRemoveAccess"))
    {
    @Html.ActionLink("Product remove", "Remove", "Product", null, new { @class = "btn btn-primary" })
    }
    </div>
    </div>
  3. 完成上述程序程序开发工作之后,还需要进入系统,设定用户权力。在下面这个范例中,示范使用Permission管理页面,将权限开放给Admin群组使用。

  4. 使用预设的管理账号登入(ID:admin@example.com, PW:admin)登入后,可以看到因为admin@example.com属于Admin群组、而Admin群组拥有ProductAddAccess权限,所以系统选单中可以看到Product add这个选单项目。

  5. 更换使用预设的访客账号登入(ID:guest@example.com, PW:guest)登入后,可以看到因为guest@example.com属于Guest群组、而Guest群组没有ProductAddAccess权限,所以系统选单中看不到Product add这个选单项目。

[ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能的更多相关文章

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

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

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

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

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

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

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

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

  5. ASP.NET MVC:窗体身份验证及角色权限管理示例

    ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...

  6. ASP.NET MVC View 和 Web API 的基本权限验证

    ASP.NET MVC 5.0已经发布一段时间了,适应了一段时间,准备把原来的MVC项目重构了一遍,先把基本权限验证这块记录一下. 环境:Windows 7 Professional SP1 + Mi ...

  7. C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表

    本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...

  8. ASP.NET MVC学习---(八)三个比较常用的方便的功能

    通过之前的了解 现在我们已经可以使用mvc进行一些简单的开发 但是还不够 哪里不够呢? 为什么现在的程序员喜欢用mvc进行开发 不就是因为它爽吗? 之前介绍的那些特点仅仅是mvc框架的一小部分 只是一 ...

  9. 在ASP.NET MVC里对Web Page网页进行权限控制

    我们在ASP.NET MVC开发时,有时候还是得设计ASP.NET的Web Page网页(.aspx和.aspx.cs),来实现一些ASP.NET MVC无法实现的功能,如此篇<Visual S ...

随机推荐

  1. KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables

    Pure computed observables Pure computed observables是KO在3.2.0版本中推出的.她相对于之前的ComputedObservables有很多改进: ...

  2. 部署到IIS报错:HTTP错误500.19,错误代码0x800700d

    title=部署到IIS报错:HTTP错误500.19,错误代码0x800700d.   用vs直接运行网站没问题,部署到IIS就报错,由此可知应该是IIS中不支持网站相关配置. 查找发现在web.c ...

  3. POJ1014 解题报告(DFS)

    题目在此:http://poj.org/problem?id=1014 要看清题意呢,题中要求输入的是价值分别为1,2,3,4,5,6的大理石的个数,而不是6块价值为输入数字的大理石!选这个题主要想练 ...

  4. 用CSS text-transform转换字母大小写

    以前我们都是用JS来实现字母的首字母大小写的,但现在没有必要了,CSS完全可以实现,话说兼容性还好从IE6开始就支持了. text-transform:none | capitalize | uppe ...

  5. js阻止冒泡及jquery阻止事件冒泡示例介绍

    js阻止冒泡 在阻止冒泡的过程中,W3C和IE采用的不同的方法,那么我们必须做以下兼容. 复制代码 代码如下: function stopPro(evt){ var e = evt || window ...

  6. ZZUOJ1196: 单调数

    /* 注意的事项:是输出小于 10^n的正整数的个数哦!开始的时候总比样例输出多一个数, 纠结了好久,原来是 0加了进去了! dpI[n][m]表示的是第n位添加数字m(0....9)的构成单调递增数 ...

  7. nginx反向代理docker registry报”blob upload unknown"解决办法

    问题症状:keepalived+nginx反向代理后端docker registry群集时,使用docker客户机向registry push镜像时出现 "blob upload unkno ...

  8. Testing - 测试基础 - 流程

    测试存在于各个阶段: 需求测试--->单元测试--->集成测试--->系统测试--->性能测试--->用户测试--->回归测试 需求测试 完整性&正确性 一 ...

  9. Anliven - 解决问题的一些方法

    How to resolve the problem? 获取基本的相关信息(后续处理问题的基础)  在怎样的背景环境下?发生了怎样的问题? 如果无法清楚地辨别或陈述问题的基本信息,那么,此时要面对的将 ...

  10. Spring应用教程-2 方法注入

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 我们通常使用lookup方法注入,它可使Spring替换一个Bean的抽象或具体方法,返回查找容器中,其他Bea ...