菜单表

    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. Go 导入当前项目下的包

    其实和其他语言很类似 import (     "../controllers" //这里就是导入上一级目录中的controllers     "./models&quo ...

  2. WebConfig 加密解密的原理是什么?

    WebConfig 加密解密的原理是什么? 使用命令 加密数据连接串 加密:aspnet_regiis -pef connectionStrings d:/...(webconfig所在路径,不能含中 ...

  3. SystemParametersinfo的用法(一)

    SystemParametersinfo的用法(一) 函数功能:该函数查询或设置系统级参数.该函数也可以在设置参数中更新用户配置文件. 函数原型:B00L SystemParametersinfo(U ...

  4. 在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建

    通常,在同一个页面上实现增删改查,会通过弹出框实现异步的添加和修改,这很好.但有些时候,是不希望在页面上弹出框的,我们可能会想到Knockoutjs,它能以MVVM模式实现同一个页面上的增删改查,再辅 ...

  5. ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等

    本篇体验在MVC4下,实现一个对Book信息的管理,包括增删查等,用到了EF Code First, 使用Unity进行依赖注入,前端使用Bootstrap美化.先上最终效果: →创建一个MVC4项目 ...

  6. CE找基址

  7. 对ORM的支持 之 8.4 集成JPA ——跟我学spring3

    8.4  集成JPA JPA全称为Java持久性API(Java Persistence API),JPA是Java EE 5标准之一,是一个ORM规范,由厂商来实现该规范,目前有Hibernate. ...

  8. SQL 参考

    本主题将介绍 ArcGIS 中的选择表达式所用的常规查询的各个元素.ArcGIS 中的查询表达式使用常规 SQL 语法. 警告: SQL 语法不适用于使用字段计算器计算字段. 字段 在 SQL 表达式 ...

  9. Android5.0 ListView特效的简单实现

    Android5.0中对于动画可所谓是情有独钟,在设计规范中大量展现了listview的动画,其实也就是一个目的:将items动画显示出来.这个看起来很炫的效果,其实实现也蛮简单的,我下面就来用动画简 ...

  10. <A>标签锚标记

    链接到本页面 – 锚记标签用于使用户“跳”到文档的某个部分 – HTML 的NAME 属性用于创建锚标记 <A NAME = “marker”>主题名称</A> – 为达到这种 ...