エンティティフレームワークを使用して、私は許可と呼ばれるエンティティを持っています。これは、実行可能と不可能を指定するためのbool
のセットです。強く型付けされたパラメータにC#の名前?
少しのように:
public class Permissions
{
public int Id {get;set;}
public int GroupId {get;set;}
public bool ViewRecords {get;set;}
public bool EditRecords {get;set;}
public bool DeleteRecords {get;set;}
public bool CreateRecords {get;set;}
public bool CreateSubGroups {get;set;}
}
あなたがアイデアを得ます。各ユーザーグループにはこれらの1つがあり、それはすべて良いことです。
私は、この情報を適切なグループとアクションに対して検証してチェックするセキュリティサービスクラスを用意しています。すべてうまくいきますが、避けたいマジック文字列が残っています。例えば
:
として私が好きなpublic bool HasPermission(int groupId, string action)
:public bool HasPermission(int groupId, Permission action)
現時点で
、私は、nameof
を使用しています:、マッピングする方法は、しかし
bool go = HasPermission(123, nameof(Permission.ViewRecords));
ありクラスプロパティは次のようになります。
bool go = HasPermission(123, Permission.ViewRecords);
私は列挙型でそれを行うことができ、お互いを鏡映するように2つを維持することができますが、それは避けたいオーバーヘッドです - 名前が機能している間は、メソッドは任意の文字列を受け取ることができ、ラインを下ろす。
なぜ列挙型を使用しないのですか?これはあまりオーバーヘッドではなく、誰かが未知の魔法の文字列をラインの下に通すことで壊れてしまうのを防ぎます。 –
列挙型のもう1つの利点は、フラグ列挙型にして、簡単に複数のアクセス許可をチェックできることです。 – Servy
@StephenWilsonそれは私が尋ねるところです。大規模なオーバーヘッドではありませんが、私は、(必ず)新しい権限が後で行の下に追加されるときに必要な変更の数を最小限にしようとします。今、完全に正当な答えはそれだけです - 「いいえ、enumは良いことです(tm)」。 @Servyの 'flags'(私にとっては新しいもの)については、' Enum'がより魅力的になります! – RemarkLima