MVC中角色管理的设计思路

最普遍的情况:等级不一样等级的人,他们对一个方法(Action)的权限不一样.

说明:有的等级能访问该方法,有的等级不能访问,有的等级只能部分访问:此处不考虑因为设计耦合度高).

针对于这种情况,人分等级(不一样的角色).

最后我们根据权限树(不一定是xml)来决定该方法是否属于某一等级

<? xml version="1.0" encoding="utf-8"  ?>
< Roles >
     < Controller  name ="Home" >
         < Action  name ="Index" ></ Action >
         < Action  name ="About" >Manager,Admin </ Action >
         < Action  name ="Contact" >Admin </ Action >
     </ Controller >
</ Roles >

 

 一个用户在登录时,我们决定在系统中设置其权限角色(数据存放在数据库中的,此刻只是载入),在权限验证的过程中,审核该用户在此方法有指定的角色.

 

很多东西没有完美,只有如何更好的解决问题.
单一职责原则很重要,但需要更完善的设计来维护复杂不单一的需求.
总结:
一个人会有多个角色;
一个角色支配着很多方法.给一个具体角色指定它的方法集合最便捷;
方法本身验证来者的角色;

 

思路:

登陆时设置该用户角色:

System.Web.Security.FormsAuthentication. SetAuthCookie( "Admin,Manager ", true);

角色验证时:

if (Roles. Contains(httpContext.User.Identity.Name))//仅仅思路,代码不准确,只是表达意思
 

 

GlobalFilters.Filters. Add(...);
参考代码.

 

ExpandedBlockStart.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Xml.Linq;

using Moon.Orm;
using mynorthdb;

namespace Razor.Moon
{
     ///   <summary>
    
///  Description of CheckLoginAttribute.
    
///   </summary>
     public  class CustemerAuthenAttribute:AuthorizeAttribute
    {
         public  new  string[] Roles {  getset; }
         protected  override  bool AuthorizeCore(HttpContextBase httpContext)
        {
             if (httpContext ==  null) {
                 throw  new ArgumentNullException( " HttpContext ");
            }
             if (!httpContext.User.Identity.IsAuthenticated) {
                 return  false;
            }
             if (Roles ==  null) {
                 return  true;
            }
             if (Roles.Length ==  0)
            {
                 return  true;
            }
             if (Roles.Contains(httpContext.User.Identity.Name))
            {
                 return  true;
            }
             return  false;
        }
         protected  override  void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
             // 处理非授权请求
            filterContext.Result =  new RedirectResult( " / ");
        }
         public  override  void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
        {
             string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
             string actionName = filterContext.ActionDescriptor.ActionName;
             string roles = GetRoles.GetActionRoles(actionName, controllerName);
             if (! string.IsNullOrWhiteSpace(roles)) {
                 this.Roles = roles.Split( new  string[] {  " , " }, StringSplitOptions.RemoveEmptyEntries);
            }
             base.OnAuthorization(filterContext);
        }
    }
}

 

参考博客:

转载于:https://www.cnblogs.com/humble/archive/2013/06/15/3137145.html

asp.net mvc 通用权限管理系统(响应布局)源码是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术,采用bootstrap为前台开发展示UI,Web Api主要负责前端的逻辑交互,再结合jQuery Ajax+Web Api进行提交数据请求。 框架特色: 1、为了数据方便读写,语言的成熟性,选择asp.net开发效率更高效率更快; 2、系统架构采用:耦合性低、重用性高、部署快、可维护性高等优点的MVC框架进行搭建; 3、系统配置文件数据采用HttpRuntime.Cache进行缓存,使得程序在运行效率更高、速度更快; 4、数据库的选型,根据系统的数据规模与需求方的相关要求,综合多方考量,调研多种数据库后选定mysql为系统数据库; 5、运行环境根据功能模块的特点,选型window server2008+IIS,部署更简洁; 6、使用报表导出开源组件NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作; 7、为了兼容更多的浏览器,让用户界面使用更友好。我们选择了响应式布局框架bootstrap; 8、系统报表我们采用了echarts开源软件,并且我们提供了非常炫酷的图形界面,特色是地图,另外还提供了柱状图、折线图、饼图、气泡图及四象限图等; 9、系统采用bootstrap响应式布局,这样面对不同分辨率设备灵活性强能够快捷解决多设备显示适应问题; 10、系统基于ASP.NET(C#) MVC +web api+Bootstrap +Jquery+ MYSQL前端采用响应式布局对页面兼容性显著提高; 系统优势: 代码可以满足大部分开发者的需求,让开发人员能省不少时间 ASP.NET MVC通用角色权限管理系统源码 更新日志: 2020-03-23 更新如下: 1、新增文件上传功能实例,保证文件能够无误上传保存并下载; 2、优化后台系统框架代码,删除以前大项目其它无用功能; 3、新增页面代码JS、css文件的压缩,使得系统运行速度更快; 4、系统登录页面新增验证校验过程,这样做到输入验证码时时验证; 5、优化系统加载页面提示数据加载功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值