我想實現一個新的基於權限的訪問方法爲我的MVC應用程序;我們有幾個權限組,每個組包含一個權限的列表。例如我們有Invoices
權限組,其中包含CreateInvoice,RemoveInvoice,etc
權限密鑰。C#屬性:使用枚舉常量作爲輸入參數
在這種方法中,每個mvc Action
應該需要執行的特定權限。我試圖通過CustomAttributes要做到這一點,是這樣的:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
爲了讓開發者更容易記住不同的權限組和權限密鑰我試圖創建權限的預定義列表應是權限組和權限密鑰的組合。但由於限制應用於使用C#中的屬性參數 我無法使它工作。 (我不想做一個額外的大enumurator,並把所有的許可密鑰在那裏)
我最後一次嘗試是創造一個枚舉每個權限組,然後在裏面定義的許可密鑰爲枚舉常量:
public class PermissionEnums
{
[PermissionGroup(PermissionGroupCode.Invoice)]
public enum Invoices
{
CreateInvoice = 1,
UpdateInvoice = 2,
RemoveInvoice = 3,
ManageAttachments = 4
}
[PermissionGroup(PermissionGroupCode.UserAccounts)]
public enum UserAccounts
{
Create = 1,
ChangePassword = 2
}
}
正如您所見,我們在此處有一組代碼組合,其中使用PermissionGroup
屬性指定的權限組密鑰以及每個枚舉常量上指定爲數字代碼的權限密鑰。
定義爲下面的RequirePermission屬性:
public class RequirePermissionAttribute : Attribute
{
private Enum _Permission;
public RequirePermissionAttribute(Enum Permission)
: base()
{
_Permission = Permission;
}
}
但問題是,Enum
類型的對象不能被用作屬性參數。
任何建議/想法表示讚賞
是的,我已經做了,但我的問題是沒有建立一個屬性(屬性ActionFilter)檢查用戶權限。我只需要一個更好的方法(比使用純字符串鍵)來創建預定義的權限常量。 – sos00
http://www.vivienchevallier。com/Articles/create-a-custom-authorizeattribute-that-accepting-parameters-of-type-enum試試這個。 – AdrianCogiel