I am trying to implement a new permission-based access approach for my MVC application; We have several Permission Groups , and each group contains a Permission list . for example, we have a permission group Invoicesthat contains CreateInvoice,RemoveInvoice,etcpermission keys.
In this approach, each mvc Actionmust require a specific permission to execute. I am trying to do this through CustomAttributes, something like this:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
So that developers can remember different permission groups and access keys, I'm trying to create a predefined list of permissions, which should be a combination of a permission group and a permission key. but due to restrictions applied to attribute attributes in C #, I could not get it to work. ( I do not want to do an extra enumerator and put all permission keys there )
my last attempt created an enumerator for each permission group and then defined permission keys as enumeration constants:
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
}
}
As you can see, we have a combination of codes here, a permission group key specified using the attribute PermissionGroupand key code permission specified as a numeric code for each enumeration constant.
RequirePermission attribute defined below:
public class RequirePermissionAttribute : Attribute
{
private Enum _Permission;
public RequirePermissionAttribute(Enum Permission)
: base()
{
_Permission = Permission;
}
}
, Enum .
/