我正在尝试为我的 MVC 应用程序实现一种新的基于权限的访问方法;我们有几个Permission Group,每个组都包含一个Permission列表。例如,我们有Invoices
包含CreateInvoice,RemoveInvoice,etc
权限密钥的权限组。
在这种方法中,每个 mvcAction
都应该需要特定的执行权限。我正在尝试通过 CustomAttributes 来做到这一点,如下所示:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
为了让开发人员更容易记住不同的权限组和权限密钥,我正在尝试创建一个预定义的权限列表,该列表应该是权限组和权限密钥的组合。但是由于在 C# 中使用属性参数的限制,我还不能让它工作。(我不想制作一个超大的枚举器并将所有权限密钥放在那里)
我的最后一次尝试是为每个权限组创建一个枚举器,然后在其中将权限键定义为枚举常量:
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
不能用作属性参数。
任何建议/想法表示赞赏