[ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能
[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这个扩充方法,来提供依权限显示选单项目的功能。使用方法如下:
在系统里加入一个新的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();
}
}
编辑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>
完成上述程序程序开发工作之后,还需要进入系统,设定用户权力。在下面这个范例中,示范使用Permission管理页面,将权限开放给Admin群组使用。

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

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

[ASP.NET MVC] 使用CLK.AspNet.Identity提供依权限显示选单项目的功能的更多相关文章
- [ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
[ASP.NET MVC] 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC) 程序代码下载 程序代码下载:点此下载 前言 ASP.NET Identity是微软所贡献的 ...
- 使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC)
使用CLK.AspNet.Identity提供以角色为基础的访问控制(RBAC) 程序代码下载 程序代码下载:点此下载 前言 ASP.NET Identity是微软所贡献的开源项目,用来提供ASP.N ...
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...
- ASP.Net Mvc实现自定义User Identity用户身份识别系统(1)
目的 当我们新建asp.net mvc 项目时,我们在使用下图所示的代码是否有以下思考: 1,在this.User.Identity.Name,为什么可以使用this便可以选中Name属性: 2,若项 ...
- ASP.NET MVC:窗体身份验证及角色权限管理示例
ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...
- ASP.NET MVC View 和 Web API 的基本权限验证
ASP.NET MVC 5.0已经发布一段时间了,适应了一段时间,准备把原来的MVC项目重构了一遍,先把基本权限验证这块记录一下. 环境:Windows 7 Professional SP1 + Mi ...
- C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表
本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...
- ASP.NET MVC学习---(八)三个比较常用的方便的功能
通过之前的了解 现在我们已经可以使用mvc进行一些简单的开发 但是还不够 哪里不够呢? 为什么现在的程序员喜欢用mvc进行开发 不就是因为它爽吗? 之前介绍的那些特点仅仅是mvc框架的一小部分 只是一 ...
- 在ASP.NET MVC里对Web Page网页进行权限控制
我们在ASP.NET MVC开发时,有时候还是得设计ASP.NET的Web Page网页(.aspx和.aspx.cs),来实现一些ASP.NET MVC无法实现的功能,如此篇<Visual S ...
随机推荐
- C# 索引器使用总结
1.索引器(Indexer): 索引器允许类或者结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于他们的访问采用参数. 最简单的索引器的使用 /// <summary> ...
- jsp获得文件的绝对路径
当前WEB应用的物理路径:<%=application.getRealPath("/")%>当前访问的JSP文件的物理路径:<%=application.getR ...
- Docker - Docker国内镜像的配置及使用
Docker国内镜像 DaoCloud - Docker加速器 阿里云 - 开发者平台 微镜像 - 希云cSphere 镜像广场 - 时速云 灵雀云 网易蜂巢 阿里云的Docker加速器 阿里云 - ...
- Skeljs – 用于构建响应式网站的前端开发框架
skelJS 是一个轻量级的前端框架,用于构建响应式站点和应用程序.让设计人员和开发人员可能够使用四个强大的组件:CSS 网格系统,响应式处理程序,CSS 的快捷方式和插件系统. 您可能感兴趣的相关文 ...
- 精美素材:40个漂亮的 PSD 贴纸模板《上篇》
贴纸经常被网页设计师用于为标注网站中的不同元素,以此吸引访客的注意.此外,使用贴纸也使网站更具吸引力.虽然设计者可以使用 Photoshop 制作贴纸,但他们也可以利用从互联网上下载现成的模板.这些模 ...
- cnn笔记2
- C#根据身份证号码,计算生日、年龄、性别
朋友谈及身份证相关的信息,才了解到原来省份证号码中包含了年龄和性别. 这样在数据库中,就不必单独留字段存放它们了(不过,要根据具体情况来,要是读取频率较高,还是单独列出为好),这样顺带解决了年龄变更的 ...
- SQL Server 2014如何提升非在线的在线操作
在今天的文章里,我想谈下在线索引重建操作( Online Index Rebuild operations),它们在SQL Server 2014里有怎样的提升.我们都知道,自SQL Server 2 ...
- Hyperledger fabric Client Node.js Hello World示例程序
简介 Hyperledger fabric Client (HFC)提供了基于Node.js的应用接口来访问Hyperledger区块. 本文介绍了一个使用HFC访问IBM Bluemixr区块服务的 ...
- HTML语义化:HTML5的新标签及IE5.5~9的部分兼容方案
一.前言 本文将介绍HTML5中新增的语义化标签,及在IE5.5~9(IE9已经开始支持部分HTML5新标签了)支持这些新标签的兼容性处理. 目录一坨: 二.语义化标签:article.aside.t ...