MVCアプリケーションに新しいアクセス許可ベースのアクセスアプローチを実装しようとしています。いくつかの権限グループがあり、各グループには権限のリストが含まれています。たとえば、パーミッションキー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
属性引数として使用できないことです。
任意の提案/アイデアは大歓迎です