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

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

相關文章
相關標籤/搜索