asp.net MVC 权限设计
来源:互联网 发布:zbrush mac 中文 编辑:程序博客网 时间:2024/05/22 14:23
几点说明:
1、该权限系统是个网站用的,用户简单,因此不涉及到部门这些信息
2、基于将角色与controller、action相关联来判断用户是否有权
3、通过重载AuthorizeAttribute实现
数据库设计:
表说明
ControllerAction
- Name是controller的名称
- IsController是指是否是controller,如果为false,表示存的是action,那么controllerName字段就派上用场了
- IsAllowedNoneRoles是指是否允许没有权限的人访问
- IsAllowedAllRoles是指是否允许有角色的人访问
IsAllowedNoneRoles,IsAllowedAllRoles实现了允许所有人访问以及允许所有注册用户访问:),并且我们约定,IsAllowedNoneRoles具有最高的优先级,其次是IsAllowedAllRoles,然后才是ControllerActionRole中定义的规则
ControllerActionRole
IsAllowed表示该action或者controller是否允许访问,加入表中有两条记录
角色NameControllNameIsAllowedIsController AAdminHomefalsefalse AHomeNulltruetrue这里约定分两个层次来判断权限:
第一条记录:表示A角色不能访问 Home/admin
第二条记录:表示A角色可以访问Controller下的所有方法
到底能不能访问呢?其实,我们以action为准,如果定义了action,我们直接从action的约定来判断,因此这里判断A不能访问Home/admin
其他几张表一看就明白,不再多说
判断是否有权限的设定
1、获取controller,action,以及存放在session中的用户信息
1 public class UserAuthorizeAttribute : AuthorizeAttribute 2 { 3 4 public override void OnAuthorization(AuthorizationContext filterContext) 5 { 6 var user = filterContext.HttpContext.Session["CurrentUser"] as User; 7 var controller = filterContext.RouteData.Values["controller"].ToString(); 8 var action = filterContext.RouteData.Values["action"].ToString(); 9 var isAllowed = this.IsAllowed(user, controller, action); 10 11 if (!isAllowed) 12 { 13 filterContext.RequestContext.HttpContext.Response.Write("无权访问"); 14 filterContext.RequestContext.HttpContext.Response.End(); 15 } 16 17 }18 19 ……20 21 }22
2、检索数据库ControllerAction表中有没有Name为第一步中controller 的记录,如果没有,我们约定这个controller是不需要进行权限控制的,如果有的话,进入第三步
3、前面提到了,我们约定对权限的控制分为两个层次,controller和action层次,如果同时定义了,以action为准。因此,我们需要判断是否在数据库中有action的记录,如果有,进入4,无,进入5
1 /// <summary> 2 /// 控制基类 3 /// </summary> 4 [UserAuthorize] 5 public abstract class BaseController : Controller 6 {}7 8 public class HomeController : BaseController{}9
演示:
在controlleraction中添加几条数据:
根据我们的规则,我们可以知道,未登录的用户可以访问Home/Public,其他几个页面则不能访问
我们看对应的Action:
- asp.net MVC 权限设计
- asp.net MVC 权限设计
- asp.net MVC 权限设计
- asp.net MVC 权限设计
- asp.net mvc的权限管理设计
- C# asp.net MVC 权限设计(续)
- Asp.net MVC自定义权限
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
- ASP.NET MVC设计目的
- 基于ASP.NET MVC URL 权限控制
- .NET MVC权限设计思考之切入点
- .NET MVC权限设计思考之切入点
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)
- asp.net core mvc权限控制:权限控制介绍
- asp.net core mvc权限控制:分配权限
- asp.net core mvc权限控制:分配权限
- iOS学习:斯坦福大学公开课: iPhone开发教程(视频)
- WPF:警惕TextBox会占用过多内存
- HDU4515:小Q系列故事——世界上最遥远的距离
- POJ3083——Children of the Candy Corn
- hdu 1856 More is better(并查集)
- asp.net MVC 权限设计
- 获得ip地理信息的几种方法【最全】
- #ifndef 的作用
- 网页制作
- 例4-5,4-6
- 删除特定字符串(c语言)
- Android优化:Android 用LruCache读取大图片并缓存
- poj 3210
- 关于堆栈