前幾個文章中介紹了一些關於MVC4.0的東東,今天我們來看一下登陸驗證,也可以說是權限驗證,即AuthorizeAttribute。這個可以使用在控制器Controller上,也可以使用在Action方法上面,這里最主要的是要介紹怎樣將自己的權限驗證進行擴展,以及禁止訪問的頁面轉向問題。
下面我們先看一下代碼,然后在進行分析,那樣就可以事半功倍了,具體代碼如下,當然還可以進行驗證擴展,那就看你的需要了。
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控制器中,這樣可以方便驗證。 由於要上班這里就不多說了,希望能夠學到點東西,同時也給他人...