Asp.net MVC自定義權限


MVC框架的一個很重要的優勢在於可拓展性很高。權限的管理在每一個Web應用程序中都非常重要,雖然微軟提供了Membership的默認權限設置,但在更多的情況下,Membership默認的權限設置並不能滿足我們實際的需要。

    下面本文將用一種簡單的辦法來自定義權限。

     在MVC框架中,屬性常用來限定控制器(Controller)的訪問。所以我們首先從AuthorizeAttribute類中繼承一個自定義的權限類。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MvcApplication_AuthorizeAttribute.Models
 8 {
 9     public class MyAuthAttribute : AuthorizeAttribute  
10     {
11         // 只需重載此方法,模擬自定義的角色授權機制  
12         protected override bool AuthorizeCore(HttpContextBase httpContext)
13         {
14             if (!httpContext.User.Identity.IsAuthenticated)//判斷用戶是否通過驗證
15                 return false;
16             string[] StrRoles = Roles.Split(',');//通過逗號來分割允許進入的用戶角色
17             if (string.IsNullOrWhiteSpace(Roles))//如果只要求用戶登錄,即可訪問的話
18                 return true;
19             bool isAccess = JudgeAuthorize(httpContext.User.Identity.Name, StrRoles);
20             if (StrRoles.Length > 0 && isAccess) //先判斷是否有設用戶權限,如果沒有不允許訪問
21                 return false;
22 
23             return true;
24         }
25         /// <summary>
26         /// 根據用戶名判斷用戶是否有對應的權限
27         /// </summary>
28         /// <param name="UserName"></param>
29         /// <param name="StrRoles"></param>
30         /// <returns></returns>
31         private bool JudgeAuthorize(string UserName, string[] StrRoles)
32         {
33             string UserAuth = GetRole(UserName);  //從數據庫中讀取用戶的權限
34             return StrRoles.Contains(UserAuth,    //將用戶的權限跟權限列表中做比較
35                              StringComparer.OrdinalIgnoreCase);  //忽略大小寫
36         }
37 
38    
39 
40         // 返回用戶對應的角色, 在實際中, 可以從SQL數據庫中讀取用戶的角色信息  
41         private string GetRole(string name)
42         {
43             switch (name)
44             {
45                 case "aaa": return "User";
46                 case "bbb": return "Admin";
47                 case "ccc": return "God";
48                 default: return "Fool";
49             }
50         }  
51     }
52 }

以上的代碼只是示例而已。你可以將實際的權限控制邏輯寫在自定義的權限控制類(MyAuthAttribute)里面。如果在特定的業務過程中,用戶沒有訪問權限,就返回false。然后我們要做的就是把這個類屬性放在要控制的控制器(Controller)或者Action上面。代碼如下所示。

1      [MyAuth(Roles = "User")] 
2         public ActionResult About()
3         {
4             return View();
5         }


這樣,我們就完成了簡單的自定義權限了。

本文示例代碼

參考鏈接

 


免責聲明!

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



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