跟我一起學習ASP.NET 4.5 MVC4.0(四)


前幾個文章中介紹了一些關於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 {  getprivate  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控制器中,這樣可以方便驗證。 由於要上班這里就不多說了,希望能夠學到點東西,同時也給他人...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM