前幾個文章中介紹了一些關於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