前几个文章中介绍了一些关于MVC4.0的东东,今天咱们来看一下登录验证,也能够说是权限验证,即AuthorizeAttribute。这个能够使用在控制器Controller上,也能够使用在Action方法上面,这里最主要的是要介绍怎样将本身的权限验证进行扩展,以及禁止访问的页面转向问题。前端
下面咱们先看一下代码,而后在进行分析,那样就能够事半功倍了,具体代码以下,固然还能够进行验证扩展,那就看你的须要了。ide
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 }this
其中User是本人定义的一个用户实体类,而Users是这个实体类的方法类,这里就补贴出代码,能够本身实现下,由于各个的应用不一样。知道了这个权限验证的权限名称,能够经过它来获取权限的值,那样就能够验证当前用户的这个权限是否经过验证。只须要重写他的代码,就能够实现验证了,为了可以告诉前端用户,提示禁止访问信息,这里设置了一个页面就是AccessError页面。spa
固然返回的页面也有不同的,加入是匿名用户就须要让他登陆,因此转向到登陆页面,而若是是登陆的用户就转向到禁止访问提示页面。这只是开发中须要验证的一个过滤器,在ASP.NET MVC开发中会使用到。orm
ASP.NET MVC 4.0改进:开发
笔者发如今MVC4.0后,微软加了一个AllowAnoumous的过滤器验证,即容许匿名用户访问,方法上的过滤器能够覆盖掉控制器上的标记。这样作有一个好处,由于不少地方都是须要登陆后才能够访问的,可是像登陆页面,注册页面这些又不须要登陆。可是每每都会放在Account控制器中,这样能够方便验证。 因为要上班这里就很少说了,但愿可以学到点东西,同时也给他人...get