MVC自定义AuthorizeAttribute实现权限管理
【转】MVC自定义AuthorizeAttribute实现权限管理
原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html
网站的权限管理是一个很重要的功能,MVC中怎么实现对于网站的权限管理呢。
在MVC中有一个名为AuthorizeAttribute的类,我们可以创建我们自己的特性 MemberValidationAttribute类,然后继承AuthorizeAttribute类来实现我们自己的网站权限的管理。然后通过将 MemberValidation特性添加到具体的Action上,将我们的权限管理精确到某个页面上。
下面我通过一个例子了解一下。
首先我们创建一个空的MVC项目。创建两个Controller和三个页面。
主页Controller
public class HomeController : Controller{//// GET: /Home/public ActionResult Index(){return View();}}
页面
用户登录Controller,在Login Action下添加 Cookie写入代码。
public class MemberController : Controller{//// GET: /Member/ public ActionResult Index() { return View(); } public ActionResult Login() { var cookie = new HttpCookie("Login", "Success"); System.Web.HttpContext.Current.Response.SetCookie(cookie); return View("LoginSuccess"); } }
页面
以上三个截图的关系是,我们希望用户先是通过登录页面登录,提示成功后,在进入Home页面。但是这时我们通过在地址栏内输 入"/Home"也可以登录到主页面,那也许就会报错。在我做的上个项目中,就是需要对用户的批量下单做一个验证,如果有没通过验证的订单是不让用户通过 在地址栏输入地址跳转到订单结算页面的,不然是会报错的。这里就需要我们将针对某一页面的验证添加到相应的Action上去。
下面我们添加一个名为MemberValidationAttribute类,让他继承AuthorizeAttribute类,这里我们只需要实现他的OnAuthorization方法
public class MemberValidationAttribute:AuthorizeAttribute{public override void OnAuthorization(AuthorizationContext filterContext) { //获取Cookies中的Login var memberValidation = System.Web.HttpContext.Current.Request.Cookies.Get("Login"); //如果memberValidation为null 或者 memberValidation不等于Success if (memberValidation==null||memberValidation.Value != "Success") { //页面跳转到 登录页面 filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {controller="Member",action="Index" })); return; } //通过验证 return; } }
然后将特性添加到HomeController下的Index Action上。
public class HomeController : Controller{[MemberValidation]public ActionResult Index(){return View(); } }
这下再怎么通过Url去跳转的话也不能再不通过登录的情况下进入我们的Home Index 页面了。
有两个遗留问题要在这里说一下:
第一:登录成功的页面并没有添加一个跳转到Home Index的 按钮,所以登录成功后还是要通过Url 到Home Index去。
第二:用户登录的时候将Cookie Login 清空。
2013-5-22 遗留问题一
在AuthorizeAttribute中还有一个方法叫AuthorizeCore,他返回一个bool值表示是否通过验证。通过验证的话跳转到下一页面A,如果未通过验证,则跳转到登录页面。
protected override bool AuthorizeCore(HttpContextBase httpContext){var cook = System.Web.HttpContext.Current.Request.Cookies.Get("CustomerInfo"); if (cook != null) { if (cook.ToString() != "") { return true; } } return false; }
登录页面的设置在web.config中。如下:
<system.web><authentication mode="Forms"> <forms loginUrl="~/Account/LoginPage" timeout="2880" /> </authentication> </system.web>
loginUrl就是要跳转到的登录页面,这是在url地址栏会携带A的地址,作为登录成功后的跳转。
public ActionResult LoginPage(string ReturnUrl){if (ReturnUrl != null) ViewBag.ReturnUrl = ReturnUrl; return View(); }
转载于:https://www.cnblogs.com/leon719/p/3884652.html
MVC自定义AuthorizeAttribute实现权限管理相关推荐
- MVC 自定义AuthorizeAttribute实现权限管理
在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize]public ActionResult TestAuthorize(){ return View();} ...
- [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
本文转自:http://www.cnblogs.com/legendxian/archive/2010/01/25/1655551.html 接上篇Asp.Net大型项目实践(10)-基于MVC Ac ...
- MVC身份验证及权限管理(转载)
from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...
- c# mvc 自定义AuthorizeAttribute
1)自定义AuthorizeAttribute using System; using System.Collections.Generic; using System.Linq; using Sys ...
- 详解:Oracle 数据库空间表、自定义用户、权限管理、序列、同义词、索引
一:数据库空间表 表空间是数据库逻辑结构的一个重要组件,可以存放各种应用对象,如表.索引.每一个表空间由一个或多个数据文件组成. 表空间分类: 1.永久性表空间 一般保存表.视图.过程和索引等的数据. ...
- asp.net mvc 实现自定义AuthorizeAttribute(权限验证)标签 无效的一种原因
ApiController下的授权筛选attribute为System.Web.Http.AuthorizeAttribute 普通Controller用的是System.Web.Mvc.Author ...
- ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制
阅读目录 1.前言 2.AuthorizeAttribute登录特性解释 3.代码示例 1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebFo ...
- android 加网络权限管理,Android添加用户组及自定义App权限的方法
Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw-- ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...
最新文章
- 网站实现个人支付宝即时到帐POST页面
- 网络营销专员浅析如何以低成本高获取实现网络营销?
- js中时间戳与日期时间之间的相互转换
- python的scramy架构_Scrapy的架构初探
- 解压bzi2文件出错,分析和处理
- 仿真模拟,需要注意这几点!
- oauth 使用令牌_使用OAuth2令牌的安全REST服务
- SLAM常用数据集(2)
- 手把手教你上手Git并上传项目到GitHub官网
- HTTP/2中的二进制分帧
- python多线程提高速度_Python3如何使用多线程升程序运行速度
- Alert提示框插件
- 简单的Swagger生产环境中屏蔽
- 我经历的学术与论文写作
- Android函数插桩
- 写作素材分类整理技巧分享
- SQL*Plus 系统变量之59 - VER[IFY]
- Java数据结构与算法(二)
- 2015_12_27微软校园招聘笔试题目
- Qt编写的项目作品30-录音播放控件(雨田哥作品)