2016-01-19 25 views
0

我有一個mst_roles表分貝followingstructure如何設置基於數據庫表的操作方法的授權訪問?

id RoleName 
1 Admin 
2 Manager 
3 Operator 

mst_users表是這樣的

id username password RoleId 
1  bob  123  2 
2  rick  777  3 

在我的MVC我有一個控制器Orders有兩個動作方法

public ActionResult TakeOrder() 
{ 

} 

public ActionResult StopAllTransactions() 
{ 

} 

我如何只讓角色經理 acce ss StopAllTransaction()運營商有權訪問TakeOrder()

回答

2

操作方法:

[AuthorizeDBRoleAttribute(Roles = "Role1,Role2")] 
public ActionResult Welcome() 
{ 
    return View(); 
} 

自定義類:

public class AuthorizeDBRoleAttribute : AuthorizeAttribute 
    { 
     public string Roles { get; set; } 

     protected override bool AuthorizeCore(HttpContextBase httpContextBase) 
     { 
      //Bind User Roles from Database here 
      string userRoles = "Role1,Role2,Role3"; 

      if (userRoles.IndexOf(Roles) > -1) 
       return true; 
      else 
       return false; 
     } 
} 
+0

但我如何去映射該角色= 「管理員」 到數據庫表的記錄id = 1,角色名= 「管理」 MVC如何知道Roles =「admin」是指DB表中的那個? –

+0

您需要重寫自定義類中的'AuthorizeAttribute'類的方法'AuthorizeCore'。我將在前面的示例中更新我的代碼。 –

+0

即時通訊這個新主題,所以我不得不問這個問題,如果你綁定usersRoles像AuthorizeDBRoleAttribute(Roles =「Role1,Role2」)它不會訪問數據庫表,而是一個harcodes字符串屬性字符串userRoles =「Role1,Role2, Role3" ; 在AuthorizeDBRoleAttribute類的權利......所以數據庫角色表是在無用的,因爲即使我添加新的角色,我仍然必須更新硬編碼字符串userRoles =「Role1,Role2,Role3」; 屬性因授權通過此字符串發生。另外,我想我必須遵循相同的技術用戶的auhorize? –

相關問題