跟我一起学习ASP.NET 4.5 MVC4.0(四)

原文http://www.cnblogs.com/xdotnet/archive/2012/03/27/aspnet_mvc4_authorize.html

前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是 权限验证,即AuthorizeAttribute。这个可以使用在控制器Controller上,也可以使用在Action方法上面,这里最主要的是要 介绍怎样将自己的权限验证进行扩展,以及禁止访问的页面转向问题。

 

下面我们先看一下代码,然后在进行分析,那样就可以事半功倍了,具体代码如下,当然还可以进行验证扩展,那就看你的需要了。


 1     /// <summary>
 2     /// 权限验证属性。
 3     /// </summary>
 4     public class AuthorizeExAttribute : AuthorizeAttribute
 5     {
 6         /// <summary>
 7         /// 初始化权限验证类。
 8         /// </summary>
 9         /// <param name="permissionName">权限名称。</param>
10         public AuthorizeExAttribute(string permissionName = "") {
11             this.PermissionName = permissionName;
12         }
13         /// <summary>
14         /// 获取权限名称。
15         /// </summary>
16         public string PermissionName { get; private set; }
17 
18         /// <summary>
19         /// 验证授权。
20         /// </summary>
21         /// <param name="httpContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
22         /// <returns>如果用户已经过授权,则为 true;否则为 false。</returns>
23         protected override bool AuthorizeCore(HttpContextBase httpContext)
24         {
25             if(httpContext == null)
26                 return false;
27             if(httpContext.User.Identity.IsAuthenticated)
28             {
29                 var user = Users.Current;
30                 if(!user.IsAnonymous && IsAllow(user) && base.AuthorizeCore(httpContext))
31                     return true;
32             }
33             httpContext.Response.StatusCode = 403;
34             return false;
35         }
36 
37         private bool IsAllow(User user)
38         {
39             //写上验证代码
40             return true;
41         }
42 
43         /// <summary>
44         /// 重写验证。
45         /// </summary>
46         /// <param name="filterContext">验证信息上下文。</param>
47         public override void OnAuthorization(AuthorizationContext filterContext)
48         {
49             base.OnAuthorization(filterContext);
50             if(filterContext.HttpContext.Response.StatusCode == 403)
51             {
52                 if(filterContext.HttpContext.User.Identity.IsAuthenticated)
53                     filterContext.Result = new RedirectResult("/AccessError");
54                 else
55                     filterContext.Result = new RedirectResult(FormsAuthentication.LoginUrl + "?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer);
56             } 
57         }

58     }

 

其 中User是本人定义的一个用户实体类,而Users是这个实体类的方法类,这里就补贴出代码,可以自己实现下,因为各个的应用不同。知道了这个权限验证 的权限名称,可以通过它来获取权限的值,那样就可以验证当前用户的这个权限是否通过验证。只需要重写他的代码,就可以实现验证了,为了能够告诉前端用户, 提示禁止访问信息,这里设置了一个页面就是AccessError页面。

 

当然返回的页面也有不一样的,加入是匿名用户就需要让他登录,所以转向到登录页面,而如果是登录的用户就转向到禁止访问提示页面。这只是开发中需要验证的一个过滤器,在ASP.NET MVC开发中会使用到。

 

ASP.NET MVC 4.0改进:

 

笔 者发现在MVC4.0后,微软加了一个AllowAnoumous的过滤器验证,即允许匿名用户访问,方法上的过滤器可以覆盖掉控制器上的标记。这样做有 一个好处,因为很多地方都是需要登录后才可以访问的,但是像登录页面,注册页面这些又不需要登录。但是往往都会放在Account控制器中,这样可以方便 验证。 由于要上班这里就不多说了,希望能够学到点东西,同时也给他人...


关于作者:网魂小兵

文章出处:http://xdotnet.cnblogs.com

本文可以随意转载,摘抄等非商业用途。

为了尊重作者成果,在转载和摘抄的时候请留下作者名称和出处。

 

时间: 2024-12-03 05:05:53

跟我一起学习ASP.NET 4.5 MVC4.0(四)的相关文章

跟我一起学习ASP.NET 4.5 MVC4.0(二)

原文http://www.cnblogs.com/xdotnet/archive/2012/03/06/aspnet_mvc40_keywords.html 上一篇文章中(跟我一起学习ASP.NET 4.5 MVC4.0(一)) 我们基础的了解了一下ASP.NET MVC4.0的一些比较简单的改变,主要是想对于MVC3.0来说的.因为这一些列主要是要给ASP.NET MVC初学者,或者还没有使用过MVC的ASP.NET开发者进行培训学习,当然也可以让我温习一下这种开发模式.所以本篇不得不讲解一下

跟我一起学习ASP.NET 4.5 MVC4.0(一)

原文 : http://www.cnblogs.com/xdotnet/archive/2012/03/05/aspnet_mvc40_preview.html   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最近想给团队成员做一个系统的解说,让大家都可以学习一 下ASP.NET MVC3.0.但是由于前两天安装了Windows8和VS11,所以写些关于ASP.NET 4.5和MVC4.0的一些东东,顺

跟我一起学习ASP.NET 4.5 MVC4.0(五)

原文http://www.cnblogs.com/xdotnet/archive/2012/03/29/aspnet_mvc4_html_control_checkboxlist.html 前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NET中包含很多ViewState或其他信息的 控件.在ASP.NET MVC中控件就是扩展方法,主要对HtmlH

跟我一起学习ASP.NET 4.5 MVC4.0(三)

原文 http://www.cnblogs.com/xdotnet/archive/2012/03/07/aspnet_mvc40_validate.html 今天我们继续ASP.NET 4.5 MVC 4.0,前两天熟悉了MVC4.0在VS11和win8下的更新,以及MVC中的基础语法和几个关键字的使用.了解了这些就可以对MVC进一步认识,相信 很多人都对MVC中三个模块有一定的认识.今天我们主要来看一下Models模块,这个和我们三层里用的实体类有点相似,不同的是这里的属性需要添加一些 验证

跟我一起学习ASP.NET 4.5 MVC4.0(六)

原文http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系 统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET MVC4.0也随之有所改变,主要相对于BETA版本.前面几章节都是介绍MVC4.0或者是3.0中内容,今天我们来了解一下WebPage 2.0下面的

怎么学习asp 给非专业的asp爱好者

爱好者|爱好者 首先声明, 1 本人不是什么asp高手,本人只是菜鸟 2 本文不是给程序员和高手看的,是给喜欢asp的业余爱好者共同探讨的 3 本人的学习方法并不一定正确,请自行斟酌 本人毕业于山东医科大学,五年的临床医学,出来以后干了医生,后来学习asp,想起学习的时候,那些日子是比较苦,但是挺有意思. 开始的时候学习程序只是爱好,学习asp已经将近两年了,这两年里,没有老师,只有一本从书店里买的书,可是因为没有电脑程序基础,看来看去什么也看不懂.最后一咬牙,从网上当了几个asp程序,然后从头

关于学习ASP和编程的28个观点

编程   1.不要放过任何一个看上去很简单的小编程问题--他们往往并不那么简单,或者可以引伸出很多知识点: 2.会用asp,并不说明你会asp: 3.看asp的书,是学不了asp语言的: 4.浮躁的人容易说:asp语言不行了,应该学yy:--是你自己不行了吧!? 5.浮躁的人容易问:我到底该学什么:--别问,学就对了: 6.浮躁的人容易问:asp有钱途吗:--建议你去抢银行: 7.浮躁的人容易说:我要中文版!我英文不行!--不行?学呀! 8.浮躁的人容易问:asp和yy哪个好:--告诉你吧,都好

我是怎么学习asp的 给非专业的asp爱好者

爱好者 说明,同样适合于我们PHPer啊! 首先声明, 1 本人不是什么asp高手,本人只是菜鸟 2 本文不是给程序员和高手看的,是给喜欢asp的业余爱好者共同探讨的 3 本人的学习方法并不一定正确,请自行斟酌 本人毕业于山东医科大学,五年的临床医学,出来以后干了医生,后来学习asp,想起学习的时候,那些日子是比较苦,但是挺有意思. 开始的时候学习程序只是爱好,学习asp已经将近两年了,这两年里,没有老师,只有一本从书店里买的书,可是因为没有电脑程序基础,看来看去什么也看不懂.最后一咬牙,从网上

ASP教程:深入认识学习ASP内置对象Request

request|对象|教程|内置对象 系统学习ASP,就是先从ASP的几大内置对象开始的.一般称五大对象:Request.Response.Server.Session.Application.今天先来看看Request对象. 当然一直还没有提到的就是,ASP到底是什么样?我看代码怎么知道是ASP代码?很简单,当看到"<%"和"%>"就表明是ASP,并且两者之间的就是ASP源码. 那为什么要学对象,对象的作用又是如何的? 其实ASP所提供的这些可在脚本中