项目:后台管理平台

意义:一个完整的管理平台需要提供用户注册、登录等功能,以及认证和授权功能。


一、为何使用CLK.AspNet.Identity

  首先简要说明所采取的权限控制方式。这里采用了基于角色的方式,基于角色的权限控制,就是将程序的操作按权限进行分组,每一个组对应一个角色,如果某个用户想访问某个操作,必须赋予这个用户相应的角色,换句话说,如果用户不属于这个操作所属的角色,这个用户也没有访问的权限。

  ASP.NET Identity是微软在MVC 5.0中引入的一种membership框架,由核心功能模块、EF模块以及OWIN模块等组成:

  •   Microsoft.AspNet.Identity.Core 库,包含Identity的主要功能;
  •   Microsoft.AspNet.Identity.EntityFramework库,主要包括ASP.NET Identity 的EF 部分的实现;
  •   Microsoft.AspNet.Identity.OWIN库,包括ASP.NET Identity对OWIN 的支持。

  在自己开发的程序中使用ASP.NET Identity后,可以定义用户属于哪个角色、哪个角色可以使用那些功能,用户通过验证之后,可以依照角色来使用系统功能。比如可以通过Authorization过滤器的AuthorizeAttribute属性来标记控制器的访问权限,对不同角色的用户提供不同的Contact操作或者视图。

public class HomeController : Controller
{
[Authorize(Roles = "Admin")]
public ActionResult Contact() { ... } [Authorize(Roles = "Guest")]
public ActionResult Contact() { ... }
}

从上面的示例也发现了问题,ASP.NET Identity授权机制可以在系统运行中动态变更用户所属的角色,但是却不能动态变更角色可以使用的功能。这是因为在ASP.NET Identity里,使用者属于哪个角色的设定储存于数据库可以动态变更,而角色可以使用那些功能的设定则是定义在程序代码没有办法动态变更。

  而这里采用的CLK.AspNet.Identity授权机制可以弥补这个问题,使用CLK.AspNet.Identity可以继续使用继承自ASP.NET Identity的功能,并且还提供了以角色为基础的访问控制(Role-based access control, RBAC),将系统授权拆解为User(使用者)、Role(角色)、Permission(权限)。在程序中使用CLK.AspNet.Identity后,可以定义用户属于哪个角色、哪个角色拥有那些权限、权限可以使用哪些功能,后续用户通过验证之后,就可以依照角色权限来使用系统功能。按如下使用方式,

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

可以看出,在程序中给控制器分配不同的权限,而用户所属的角色以及角色所拥有的权限是可以动态改变的。

二、在项目中使用CLK.AspNet.Identity

  通过NuGet安装CLK.AspNet.Identity、CLK.AspNet.Identity.MVC、CLK.AspNet.Identity.EntityFramework三个库。

然后在App_Start/IdentityConfig.cs和Models/IdentityModel.cs两个文件中添加身份验证有关的数据库上下文类、管理器类和对象实体类,这部分的代码可以参考CLK.AspNet.Identity.MVC Template的相应文件,要注意数据库的创建根据项目需要是新建还是在已有的数据库中添加表单,是否需要在程序初始化时由程序创建基本的用户、角色等信息,以及配置密码验证逻辑,锁定默认值等信息。

  在App_Start/Startup.Auth.cs中配置身份验证的详细信息,也可以参考CLK.AspNet.Identity.MVC Template的相应文件。

  最后创建RBACAuthorizeAttribute类,自定义的Authorization Filter,同样参考CLK.AspNet.Identity.MVC Template。

  程序运行中对用户角色权限的管理,需要相应的控制器和视图、视图模型,根据项目需要编写,主要是CRUD操作,给用户分配角色权限、给角色分配权限等操作。

三、在视图、域中使用权限管理

  对视图中的某些内容设置角色权限,只对这个角色下的用户显示。

if(User.IsInRole("Admin"))
{
  <li>
    <a href="@Url.Action("Index", "CategoryType", new { area = "Admin" }, null)"> <i class="fa fa-cogs"> </i></a>
  </li>
}

  对多个页面设置访问权限,可以在每个需要的控制器上添加权限属性,也可以在Web.config中,配置下面的节点,实现对指定文件或路径的权限设置。

<location path="Admin">
  <system.web>
    <authorization>
      <allow roles="Admin"/> <!--允许指定Admin角色用户可访问-->
      <deny users="*"/>    <!-- 禁止所有非指定访问用户的访问-->
    </authorization>
  </system.web>
</location>

参考资源

http://www.cnblogs.com/Leo_wl/p/4564663.html

http://www.cnblogs.com/chonghanyu/p/4090631.html

http://www.cnblogs.com/chonghanyu/p/4344662.html

关键字:.NET MVC,RBAC

[.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity的更多相关文章

  1. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  2. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

    今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...

  3. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理4

    首先先加个区域,名为Admin using System.Web.Mvc; namespace AuthorDesign.Web.Areas.Admin { public class AdminAre ...

  4. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理9

    前两天因有事就没来得及写.今天刚刚好空了.这次写的是对角色和管理员对页面按钮之间的控制.先看页面效果 说明:先根据角色设置好角色的权限,然后管理员在对应的角色下的权限去设置其权限. 在设置角色权限的时 ...

  5. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6

    接下来先做角色这一板块的(增删改查),首先要新建一个Role控制器,在添加一个RoleList的视图.表格打算采用的是bootstrap的表格. using System; using System. ...

  6. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理7

    做完角色之后接下来做先做页面按钮的增加.删除.修改.这里用到的功能和角色那边是一样的.就不多说了.直接上代码. 后台控制器代码 using AuthorDesign.Web.App_Start.Com ...

  7. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理8

    接下来做的是对页面的增删改查与页面与页面按钮之间的联系.先上代码和页面效果 using AuthorDesign.Web.App_Start.Common; using System; using S ...

  8. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理1

    首先给上项目的整体框架图:,这里我没有使用BLL,因为感觉太烦了就没有去使用. 那么接下来我们首先先去Model层中添加Model. 管理员类: using System; using System. ...

  9. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理2

    首先我们来写个类进行获取当前线程内唯一的DbContext using System; using System.Collections.Generic; using System.Data.Enti ...

随机推荐

  1. OpenCV训练分类器制作xml文档

    OpenCV训练分类器制作xml文档 (2011-08-25 15:50:06) 转载▼ 标签: 杂谈 分类: 学习 我的问题:有了opencv自带的那些xml人脸检测文档,我们就可以用cvLoad( ...

  2. SQLite使用教程4 创建数据库

    http://www.runoob.com/sqlite/sqlite-create-database.html SQLite 创建数据库 SQLite 的 sqlite3 命令被用来创建新的 SQL ...

  3. svn 如何解决冲突

    项目中,往往不止你一人开发,多人开发,难免会有代码的冲突.彼此间谁也不能保证不会修改同个文件.如果修改了同个方法的内容.这时提交到svn是会提示代码冲突的. 当然,冲突是可控的,但不能避免.每次写代码 ...

  4. 对PostgreSQL的prepared statement的深入理解

    看官方文档: http://www.postgresql.org/docs/current/static/sql-prepare.html PREPARE creates a prepared sta ...

  5. 动网论坛password暴力破解程序代码

    <%  response.buffer=false  '为防止程序陷入死循环,初始化一些最大重试值  Dim MaxPassLen,MaxPassAsc  MaxPassLen=20 'pass ...

  6. 实战:ORACLE SQL Performance Analyzer

    通过 SPA,您能够依据各种更改类型(如初始化參数更改.优化器统计刷新和数据库升级)播放特定的 SQL 或整个 SQL 负载,然后生成比較报告,帮助您评估它们的影响. 在 Oracle Databas ...

  7. 【转】python中常用第三方包os sys

    1. os 这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下 ...

  8. Access-数据类型与.net OleDbType枚举类型对应关系

    列表最常见的数据类型映射 访问类型名称 数据库数据类型 OLEDB 类型 .NET 框架类型 成员名称 文本 VarWChar DBTYPE _ WSTR System.String OleDbTyp ...

  9. Android开发实例之多点触控程序

    智能终端设备的多点触控操作为我们带来了种种炫酷体验,这也使得很多Android开发者都对多点触控程序的开发感兴趣.实际上多点触控程序的实现并不是那么遥不可及,而是比较容易.本文就主要通过一个实例具体讲 ...

  10. 【Android开发】完美解决Android完全退出程序

    背景:假说有两个Activity, Activity1和Activity2, 1跳转到2,如果要在2退出程序,一般网上比较常见的说法是用 System.exit(0) 或是 android.os.Pr ...