2016-07-20 18 views

答えて

1

ロールは、stringなどの定数式でなければなりません。最も簡単な方法はcosntantを使うことです。

public static class PerfilUsuario 
{ 
    public const string AdministradorLoja = "AdministradorLoja"; 
    public const string Gerente = "NaviGerentegators"; 
} 

[Authorize(Roles = PerfilUsuario.AdministradorLoja + ", " + 
    PerfilUsuario.Gerente)] 
+0

enumを使用する方法はいくつかありますか? –

+0

申し訳ありませんが、他の方法はありません。この場合、ConstantはEnumと非常によく似ています。 – Win

0

ここに私がしたことがあります...

私は自分の権限データベースを動かすことにしたので、文字列を「型付き」に変換してコンパイル時の警告を得ることができ、名前を変更することができましたデータベースのパーミッションと、すべてのプロダクションコードを更新する必要はありません。属性は文字列ベース(いわゆるマジック文字列)なので、列挙型ではなく、データベースを読み込んで各レコードの構造体を生成するT4スクリプトを使用しました。これにより、素晴らしい表示名、アクセス許可の詳細、ユーザーに表示できるエラーメッセージなどを追加することもできました。

T4テンプレートを実行した後のアクセス許可の行の例を示します。

public struct CanViewClaimData 
{ 
    // Using const allows the compiler to generate the values in the assembly at compile time and satisfy MVC Authorize Attribute requirements for const strings. 
    public const System.String Name = "CanViewClaimData"; 
    public const System.String DisplayName = "Can View Claim Data"; 
    public const System.String Description = "The allows users to view claim data"; 
    public const System.String DefaultErrorMessage = "You must have the \"Can View Claim Data\" permission to access this feature."; 

} 

その後のコードで、私は承認分類サブを使用し、各自動ビルド時に続いて、このような、

[Security.AuthorizedAttribute(Roles = CanViewClaimData.Name, Message = CanViewClaimData.DefaultErrorMessage)] 

としてアクションをマークし、私たちのC.I.にプッシュ環境では、T4テンプレートをビルドプロセスの一部として実行して、構造体ストリングをデータベースと同期させて保持します。

これまでのところ、これは本当にうまくいっていて、私のプロダクトオーナーに、開発者が関与しなくても、データベース内の権限名や説明などを編集できるようになりました。

関連する問題