前几个文章中介绍了一些关于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控制器中,这样可以方便 验证。 由于要上班这里就不多说了,希望能够学到点东西,同时也给他人...