基于ASP.NET MVC URL 权限控制

 **1. 在ASP.NET MVC项目中新建一个AccountHelper类,这是一个辅助类。GetPermissionItems方法用于获取权限ID和页面路径的对应关系。<br/>
这是全局的,并且每个用户在访问页面时都会用到这些信息,所以存入Cache中。<br/>**

 /**//// <summary>
 /// 获取权限项
 /// </summary>
 /// <returns>权限项列表</returns>
 public static List<PermissionItem> GetPermissionItems()
 {
    // 如果缓存中已经存在权限列表信息,则直接从缓存中读取。
     if (HttpContext.Current.Cache["PermissionItems"] == null)
    {
         // 如果缓存中没有权限列表信息,则从数据库获取并写入缓存
          UrlAuthorizeEntities db = new UrlAuthorizeEntities();
         var items = db.PermissionItem.Where(c => c.PermissionID > 0).ToList();
         HttpContext.Current.Cache["PermissionItems"] = items;
    }
     // 这个缓存中保存了所有需要进行权限控制的页面所对应的权限ID
    return (List<PermissionItem>)HttpContext.Current.Cache["PermissionItems"];
}

 **2.GetUserPermission方法是将用户所具有的权限ID保存到一个一维Int32数组中。<br/>这个信息每个用户是不同的,但是会经常使用到,所以存入Session。**
 /**//// <summary>
 /// 获取用户权限
 /// </summary>
 /// <param name="userID">用户ID</param>
 /// <returns>用户权限数组</returns>
 public static Int32[] GetUserPermission(int userID)
 {
   // 如果缓存中已经存在权限列表信息,则直接从缓存中读取。
   if (HttpContext.Current.Session["Permission"] == null)
   {
       // 从数据库获取用户权限并将权限ID放到int数组并存入Session
       UrlAuthorizeEntities db = new UrlAuthorizeEntities();
       var permissions = db.PermissionList.Where(c => c.UserID == userID).Select(c=>c.PermissionID).ToArray();
       HttpContext.Current.Session["Permission"] = permissions;
   }
   return (Int32[])HttpContext.Current.Session["Permission"];
}

 **3. 再新建一个UrlAuthorizeAttribute类,继承自AuthorizeAttribute,这是一个Filter。<br/>我们重写它的OnAuthorization方法,以在ASP.NET页生命周期身份验证阶段执行它。**
 /**//// <summary>
 /// 重写OnAuthorization
 /// </summary>
 /// <param name="filterContext"></param>
 public override void OnAuthorization(AuthorizationContext filterContext)
 {
   // 获取权限项列表
   List<PermissionItem> pItems = AccountHelper.GetPermissionItems();
   // 获取当前访问页面对应的权限ID。如果item为空则表示当前页面没有权限控制信息,不需要进行权限控制
   var item = pItems.FirstOrDefault(c => c.Route == filterContext.HttpContext.Request.Path);
    if (item != null)
   {
       if (Array.IndexOf<Int32>(AccountHelper.GetUserPermission(int.Parse(filterContext.HttpContext.Session["UserID"].ToString())), item.PermissionID) == -1)
       {
           // 提示权限不够,也可以跳转到其他页面
           filterContext.HttpContext.Response.Write("没有权限访问该页面");
           filterContext.HttpContext.Response.End();
       }
   }
   else
   {
       // 如果权限项列表中不存在当前页面对应的权限ID则所有用户都不允许访问,直接提示无权访问。***注1***
       filterContext.HttpContext.Response.Write("没有权限访问该页面");
       filterContext.HttpContext.Response.End();
   }
}

[本文摘自]
(http://www.cnblogs.com/snowdream/archive/2009/07/07/url-authorize-in-aspnet-mvc.html)

个人观点:
可直接获取出当前用户具有的权限URL存入Session中,用以判断是否具有权限。缺点:Session会存入大量的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值