现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理。
 
1 后台管理效果
(1)角色管理
(2)权限管理
 
2 数据库设计(MSSQL)
(1)用户表dbo.Users
项
类型
说明
UserId
int
主键,标识列
Name
nvarchar(50)
 
Password
nvarchar(50)
 

(2)角色表dbo.Roles

项
类型
说明
RoleId
int
主键,标识列
Name
nvarchar(50)
 

(3)权限表dbo.Autorities

项
类型
说明
AutorityId
int
主键,标识列
Name
nvarchar(50)
方便管理员等用户操作
Code nvarchar(50) 用于代码判断

(4)用户权限表dbo.UserRoles

项
类型
说明
UserId
int
联合主键,外键到dbo.Users.UserId
RoleId
int
联合主键,外键到dbo.Roles.RoleId
(5)角色权限表dbo.RoleAuthorities
项
类型
说明
RoleId
int
联合主键,外键到dbo.Roles.RoleId
AuthorityId
int
联合主键,外键到dbo.Authorities.AuthorityId
3 程序设计
(一)设计思路
(1)使用自定义过虑器(Filter),用于执行动作(Action)之前进行权限验证,当无相应权限时跳转无权限提示页面。
(2)在每个动作(Action)添加Filter元标注,并在标注中传入权限代码
[AuthorityManageFilter(Code="UserCreate")]
public ActionResult UserCreate()
{...}
(3)权限检查方法:
public bool AuthorityCheck(string code)
{
...//遍历该用户的角色和角色下的权限进行检查,有对应权限则返回true,否则返回false
}
(二) 代码实现
(1)AuthorityFilter
 
//权限验证
public class AuthorityFilter : ActionFilterAttribute
{
public string Code { set; get; }//要验证的权限的代码
 

        public override void OnActionExecuting(ActionExecutingContext filterContext)

 
{
CookieHelper cookie = new CookieHelper();
HttpResponseBase response = filterContext.HttpContext.Response;
 
if (!cookie.AuthorityCheck(Code)
&& filterContext.RequestContext.HttpContext.Request.RawUrl != "/nopermission"

)

//为了避免连登录、退出登录、进入无权限提示页面的权限都没有,此处要按需排除一些url
{
     response.Redirect("/nopermission");
}
 
        base.OnActionExecuting(filterContext);

        }

 
}
 
(2)Action的调用
 
[AuthorityManageFilter(Code="UserCreate")]
[AuthorityManageFilter(Code="UserDelete")]//可添加多个?
public ActionResult UserCreate()
{...}
 

(3)权限检查方法,是CookieHelper中的一个方法

public bool AuthorityCheck(string code)
{
using(var context = new Entity())
{
var user = context.Find(this[UserId]);
if(user!=null)
{
foreach(var role in user.Roles)
{
foreach(var authority in role.Authorities)
{
if(authority.Code == code)
{
return true;
}
}
}
}
else
{
return false;
}
}
}
 
总结:
1 优点:简单,快捷。当一个版本已经发布时,所有的权限即已经定下来,不允许增减或修改,虽然如此,仍旧可以快速实现出一套行之有效的用户-角色-权限管理解决方案;并且它应是开放的,当整个项目增加新的功能时,只需要更改数据库和相应的Action进行扩展。
2 缺点:不够灵活,即它只能管理原有的权限,而不能通过配置增加新的权限或删除权限等,当然,这个是由于设计的简化处理决定的,可以设计得更加灵活一点,即这个权限Code值不需要显式传入,而可以根据controller和action的名字,从数据库中相应表(当然要新加表)读取相应的权限代码,然后加以验证,不过,这样一样,虽然灵活多了,但是对于管理员等来说,操作上则麻烦得多了,而且要求操作人员要懂代码,这个看起来似乎是没什么必要。
3 可以改进的地方:(1)硬编码。虽然没有直接写在action内容的脚手架代码,但其实或多或少有几分相似,因为一个action就要相应地写上一个filter,也许可以将配置写在web.config文件中,然后只需要将filter加在controller上,而不是加在每个action上,并且不需要传参数,但也许这样的改进效果也有限,因为这可能意味着没完没了地更新web.config中的这个配置参数的开始;(2)简单和灵活需要做出一个平衡。也许吧,但若要增加一个新的功能的话,能否不更新项目源码而通过配置就产生了?至少对于一般情况下,新增功能,还是要更改源代码的,因此,顺便增加一下权限管理的内容,也无可厚非吧。所以,若非特殊项目,灵活性还是先不考虑了。
4 所以,以上,是我认为一个比较满意的asp.net mvc下的用户-角色-权限解决方案。
 
本人原创,欢迎转载,转载请注明出处。

asp.net mvc的权限管理设计的更多相关文章

  1. ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  2. ASP.NET MVC 用户权限-1

    MVC框架的开发网站的利器,MVC框架也开始越来越流行了.对于.NET ,微软也发布了MVC框架,做网站通常要涉及到用户的权限管理,对于.NET MVC 框架的用户权限管理又应该怎样设置呢?下面通过示 ...

  3. SQL Server:OA权限管理设计的实现 下

    SQL Server:OA权限管理设计的实现 下   OA系统权限管理设计方案     不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能.     可以对“组”进行权限 ...

  4. 基于Spring Security2与 Ext 的权限管理设计与兑现

    基于Spring Security2与 Ext 的权限管理设计与实现 一.Spring Security介绍 Spring Security的前身Acegi,其配置及使用相对来说复杂一些,因为要配置的 ...

  5. ASP.net MVC 构建layui管理后台(构造基础仓储)<1>

    本文章为ASP.net MVC 构建layui管理后台,第一篇. 使用EF+ado.net 实体数据模型模式进行底层的数据库连接. 在项目添加一个类库Model 在类库Model上添加一个ado.ne ...

  6. 关于ASP.NET MVC的权限认证的一些总结

    最近在学ASP.NET MVC的权限认证的一些东西,上网搜索了一阵,发现网上的方法大多数是以下几类: 一.FormsAuthentication.SetAuthCookie(admin.Name, f ...

  7. ASP.NET MVC +EasyUI 权限设计(二)环境搭建

    请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...

  8. ASP.NET MVC +EasyUI 权限设计(一)开篇

    在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...

  9. ASP.NET MVC +EasyUI 权限设计(四)角色动作

    请注明转载地址:http://www.cnblogs.com/arhat 由于最近的事情比较多,一直忙于工作和照顾老婆,所以老魏更新的速度慢了,本来写文章就要占据工作和生活很多的时间,这也就是院子中很 ...

随机推荐

  1. sqlserver生成脚本

    1.只生成数据 2.只生成架构 3.生成数据和架构

  2. 在docker中部署nginx

    1端口映射 大写P  为容器暴漏的所有端口进行映射   -p ,--publish-all=true    docker run -P -it centos  /bin/bash 小写p  指定哪些容 ...

  3. tabl-cell

    参考:http://www.cnblogs.com/StormSpirit/archive/2012/10/24/2736453.html 总结特点 多个并排的table-cell始终等高. 宽度可以 ...

  4. CSS3--- 颜色

    1.RGB是一种色彩标准,是由红(R).绿(G).蓝(B)的变化以及相互叠加来得到各式各样的颜色.RGBA是在RGB的基础上增加了控制alpha透明度的参数. 语法:color:rgba(R,G,B, ...

  5. python 连接docker

    发现15年写过的一小段,先mark一下,后续玩儿起来 import docker c = docker.Client(base_url='unix://var/run/docker.sock',ver ...

  6. 分享下找到的Github上大神的EmpireofCode进攻策略:反正我是用了没反应,改了代码后单位不进攻,蠢站在那里,我自己的策略调调能打败不少人,这个日后慢慢研究吧,Github上暂时找到的唯一策略

    from queue import PriorityQueue from enum import Enum from battle import commander from battle impor ...

  7. 教你轻松在React Native中集成统计(umeng)的功能(最新版)

    关于在react-native中快速集成umeng统计,网上的文章或者教程基本来自----贾鹏辉老师的文章http://www.devio.org/2017/09/03/React-Native-In ...

  8. Oracle数据库之初步接触

    每个Oracle数据库都是数据的集合,这些数据包含在一个或多个文件中.数据库有物理和逻辑两种结构.在开发应用程序的过程中,会创建诸如表和索引这样的结构,这些结构用于数据行的存储和查询.可以为对象的名称 ...

  9. Leetcode 274.H指数

    H指数 给定一位研究者论文被引用次数的数组(被引用次数是非负整数).编写一个方法,计算出研究者的 h 指数. h 指数的定义: "一位有 h 指数的学者,代表他(她)的 N 篇论文中至多有 ...

  10. zoj 2829 Beautiful Number

    Beautiful Number Time Limit: 2 Seconds      Memory Limit: 65536 KB Mike is very lucky, as he has two ...