【转】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实现权限管理相关推荐

  1. MVC 自定义AuthorizeAttribute实现权限管理

    在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize]public ActionResult TestAuthorize(){ return View();} ...

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

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

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

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

  4. c# mvc 自定义AuthorizeAttribute

    1)自定义AuthorizeAttribute using System; using System.Collections.Generic; using System.Linq; using Sys ...

  5. 详解:Oracle 数据库空间表、自定义用户、权限管理、序列、同义词、索引

    一:数据库空间表 表空间是数据库逻辑结构的一个重要组件,可以存放各种应用对象,如表.索引.每一个表空间由一个或多个数据文件组成. 表空间分类: 1.永久性表空间 一般保存表.视图.过程和索引等的数据. ...

  6. asp.net mvc 实现自定义AuthorizeAttribute(权限验证)标签 无效的一种原因

    ApiController下的授权筛选attribute为System.Web.Http.AuthorizeAttribute 普通Controller用的是System.Web.Mvc.Author ...

  7. ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

    阅读目录 1.前言 2.AuthorizeAttribute登录特性解释 3.代码示例 1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebFo ...

  8. android 加网络权限管理,Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw-- ...

  9. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(8) 权限管理,自定义权限,扩展权限...

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目 目录索引 简述 今天我们来做权限的管理,这篇比较多 希望新手朋友慢慢消化 项目准备 我们用的工具是:VS 2013 ...

最新文章

  1. 网站实现个人支付宝即时到帐POST页面
  2. 网络营销专员浅析如何以低成本高获取实现网络营销?
  3. js中时间戳与日期时间之间的相互转换
  4. python的scramy架构_Scrapy的架构初探
  5. 解压bzi2文件出错,分析和处理
  6. 仿真模拟,需要注意这几点!
  7. oauth 使用令牌_使用OAuth2令牌的安全REST服务
  8. SLAM常用数据集(2)
  9. 手把手教你上手Git并上传项目到GitHub官网
  10. HTTP/2中的二进制分帧
  11. python多线程提高速度_Python3如何使用多线程升程序运行速度
  12. Alert提示框插件
  13. 简单的Swagger生产环境中屏蔽
  14. 我经历的学术与论文写作
  15. Android函数插桩
  16. 写作素材分类整理技巧分享
  17. SQL*Plus 系统变量之59 - VER[IFY]
  18. Java数据结构与算法(二)
  19. 2015_12_27微软校园招聘笔试题目
  20. Qt编写的项目作品30-录音播放控件(雨田哥作品)

热门文章

  1. Microsoft Office 2003 Proofing Tools
  2. 不同子网下PC安装网络打印机
  3. 引用共享驱动安装网络打印机
  4. 吃在陕南 好客陕南欢迎您_陕南赤子_新浪博客
  5. 硬盘格式化后能恢复数据吗
  6. 魂斗罗java设计,你所不知道的《魂斗罗》 设计企划书告诉你神作如何炼成
  7. 买车需要了解的知识(持续更新)
  8. 那个从阿里离职的漂亮女高管,从来不过情人节
  9. 如何绑定 Webhook 推送
  10. Android 中替换开机动画(附动画包)