基于ASP.NET MVC URL 权限控制

 **1. 在ASP.NET MVC项目中新建一个AccountHelper类,这是一个辅助类。GetPermissionItems方法用于获取权限ID和页面路径的对应关系。
这是全局的,并且每个用户在访问页面时都会用到这些信息,所以存入Cache中。
** /**//// /// 获取权限项 /// /// 权限项列表 public static List 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)HttpContext.Current.Cache["PermissionItems"]; } **2.GetUserPermission方法是将用户所具有的权限ID保存到一个一维Int32数组中。
这个信息每个用户是不同的,但是会经常使用到,所以存入Session。** /**//// /// 获取用户权限 /// /// 用户ID /// 用户权限数组 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。
我们重写它的OnAuthorization方法,以在ASP.NET页生命周期身份验证阶段执行它。** /**//// /// 重写OnAuthorization /// /// public override void OnAuthorization(AuthorizationContext filterContext) { // 获取权限项列表 List pItems = AccountHelper.GetPermissionItems(); // 获取当前访问页面对应的权限ID。如果item为空则表示当前页面没有权限控制信息,不需要进行权限控制 var item = pItems.FirstOrDefault(c => c.Route == filterContext.HttpContext.Request.Path); if (item != null) { if (Array.IndexOf(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会存入大量的数据。

你可能感兴趣的:(MVC,mvc,asp.net)