菜单表

    namespace AspNetMvcAuthDemo1.Models
{
public class PermissionItem
{
public int ID { set; get; } public int PermissionID { set; get; } public string Name { set; get; } public string Route { set; get; }
}
}

菜单表集合

namespace AspNetMvcAuthDemo1.Models
{
public class PermissionList
{
public int ID { set; get; } public int PermissionID { set; get; } public int UserID { set; get; }
}
}

模拟初始化菜单数据

    namespace AspNetMvcAuthDemo1.Models
{
public class UrlAuthorizeEntities
{
public IEnumerable<PermissionItem> PermissionItems = new List<PermissionItem>
{
new PermissionItem{ ID = , PermissionID = , Name = "Test Page 1", Route = "/Home/Page1" },
new PermissionItem{ ID = , PermissionID = , Name = "Test Page 2", Route = "/Home/Page2" },
new PermissionItem{ ID = , PermissionID = , Name = "Test Page 3", Route = "/Home/Page3" },
new PermissionItem{ ID = , PermissionID = , Name = "Test Page 4", Route = "/Home/Page4" },
new PermissionItem{ ID = , PermissionID = , Name = "Test Page 5", Route = "/Home/Page5" }
}; public IEnumerable<PermissionList> PermissionList = new List<PermissionList>
{
new PermissionList{ ID = , PermissionID = , UserID = },
new PermissionList{ ID = , PermissionID = , UserID = },
};
}
}

账户帮助类-AccountHelper

    namespace AspNetMvcAuthDemo1.UrlAuthorize
{
/// <summary>
/// Account Helper
/// </summary>
public static class AccountHelper
{
/// <summary>
/// Get all permission list
/// </summary>
/// <returns>Permission List</returns>
public static List<PermissionItem> GetPermissionItems()
{
if (HttpContext.Current.Cache["PermissionItems"] == null)
{
UrlAuthorizeEntities db = new UrlAuthorizeEntities();
var items = db.PermissionItems.Where(c => c.PermissionID > ).ToList();
HttpContext.Current.Cache["PermissionItems"] = items;
} return (List<PermissionItem>)HttpContext.Current.Cache["PermissionItems"];
} /// <summary>
/// Get User Permission
/// </summary>
/// <param name="userID">User ID</param>
/// <returns>User Permission Array</returns>
public static Int32[] GetUserPermission(int userID)
{
if (HttpContext.Current.Session["Permission"] == null)
{
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"];
}
}
}

账户帮助类-AccountHelper

    namespace AspNetMvcAuthDemo1.UrlAuthorize
{
/// <summary>
/// URL permission
/// </summary>
public class UrlAuthorizeAttribute : AuthorizeAttribute
{
/// <summary>
/// Rewrite OnAuthorization
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Get permission list
List<PermissionItem> pItems = AccountHelper.GetPermissionItems(); //Get current page permission ID,if items is null,the page you what to access has not been configed.
var item = pItems.FirstOrDefault(c => c.Route == filterContext.HttpContext.Request.Path); if (item != null)
{
int[] permissions = AccountHelper.GetUserPermission(int.Parse(filterContext.HttpContext.Session["UserID"].ToString()));
if (Array.IndexOf<Int32>(permissions, item.PermissionID) == -)
{
//have not permission
filterContext.HttpContext.Response.Write("You have no permission to access this page.");
filterContext.HttpContext.Response.End();
}
}
else
{
//the page you what to access has not been configed.
filterContext.HttpContext.Response.Write("The page you want to access has not been configed permission.");
filterContext.HttpContext.Response.End();
}
}
}
}

控制器

    namespace AspNetMvcAuthDemo1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
} public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
} public string Login()
{
HttpContext.Session["UserID"] = ;
return "Login success.";
} [UrlAuthorize]
public string Page1()
{
return "Page1";
} [UrlAuthorize]
public string Page2()
{
return "Page2";
} [UrlAuthorize]
public string Page3()
{
return "Page3";
} [UrlAuthorize]
public string Page4()
{
return "Page4";
} [UrlAuthorize]
public string Page5()
{
return "Page5";
} [UrlAuthorize]
public string Page6()
{
return "Page6";
}
}
}

完整代码下载点击这里

技术交流QQ群:15129679

ASP.NET MVC 基于页面的权限管理的更多相关文章

  1. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

  2. ASP.net MVC 基于角色的权限控制系统的实现

    一.引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法. 下面是最常见的实现方式: public class Custom ...

  3. [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)

    本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...

  4. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  5. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性(转载)

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  6. 10.spring-boot基于角色的权限管理页面实现

    10.spring-boot基于角色的权限管理页面实现

  7. MVC身份验证及权限管理

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  8. MVC身份验证及权限管理(转载)

    from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...

  9. 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

    距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...

随机推荐

  1. TimingTool - The Timing Diagram Editor

    TimingTool - The Timing Diagram TimingTool is designed to give electronics engineers an easy to use ...

  2. IAR EWARM __iar_program_start, __iar_data_init3, __iar_copy_init3, __iar_zero_init3

    #include <stdint.h> // The type of a pointer into the init table. typedef void const * table_p ...

  3. C#访问远程主机资源的方法,多种方式

    最近要实现访问远程主机的共享目录中的一个文件.遇到了权限问题.google了一下,找到了几种解决方法,记录如下: 一.调用Net use命令 // 使用方法:        //if (Connect ...

  4. 使用Builder模式造车

    Builder模式也可以造车. 对于Builder模式来说,首相要把要造的车确定下来: public class Car { public string Model { get; set; } pub ...

  5. ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API

    本篇尝试在现有的ASP.NET MVC 4 项目上增加使用ASP.NET Web API. 新建项目,选择"ASP.NET MVC 4 Web应用程序". 选择"基本&q ...

  6. SpringBoot配置多数据源

    原文:https://www.jianshu.com/p/033e0ebeb617 项目中用到了两个数据库,分别是Oracle和Mysql,涉及到了多数据源问题,这里做下记录 官方讲解:https:/ ...

  7. /bin/sh^M: bad interpreter:没有那个文件或目录解决

    /bin/sh^M: bad interpreter:没有那个文件或目录解决   执行脚本时发现如下错误: /bin/sh^M: bad interpreter: 没有那个文件或目录   错误分析: ...

  8. eval json ajax

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  9. 使用开源库 Objective-C RegEx Categories 处理正则表达式

    Objective-C RegEx Categories https://github.com/bendytree/Objective-C-RegEx-Categories 使用说明:将 RegExC ...

  10. [Web 前端] React Router v4 入坑指南

    cp from : https://www.jianshu.com/p/6a45e2dfc9d9 万恶的根源 距离React Router v4 正式发布也已经过去三个月了,这周把一个React的架子 ...