asp.net mvc 4.0アプリケーション内で、AuthorizeAttribute
「<em>AllowAttribute」というカスタムを作成しています。一言で言えば、この属性を特定のメソッド(コントローラー全体ではなく)に適用し、その属性がビット単位のファッションパラメーターを受け取ることができるようにしたいと思います。
私はそのように属性を使用します(注:MemberType
は列挙型です)
[Allow(MyProperty = MemberType.User | MemberType.Administrator)]
属性自体は次のように定義されます。
public class AllowAttribute : AuthorizeAttribute
{
public MemberType MyProperty { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (MemberContext.Current.Member == null || MemberContext.Current.Member.MemberType != this.MyProperty)
throw new HttpException(403, "Forbidden");
base.OnAuthorization(filterContext);
}
}
基本的に、現在ログインしているユーザーのMemberTypeを、MyProperty内で渡されたものと比較しようとしています。現在ログインしているユーザーがパラメーターで渡された値と一致しない場合、禁止された例外をスローします。
複数の列挙値が属性に渡された場合、単純な(等しくない)は機能しないため、ビット単位の比較に関するガイダンスが必要です。
ありがとう