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

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.