MVCアプリケーションで使用するためにカスタムAuthorizeAttribute
を作成しようとしています。このタグはUsersテーブルをチェックし、そのユーザーが管理者であるかどうかを確認します。十分に簡単です。私を混乱させている何MVCカスタム承認属性の振る舞い
[AttributeUsage(AttributeTargets.All, AllowMultiple=false, Inherited = true)]
public class AdminOnlyAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
using (var db = new ArtContext()) {
var user = db.Users
.Where(x => x.UserId == httpContext.User.Identity.Name)
.FirstOrDefault();
if (user != null)
if (user.IsAdministrator)
return true;
}
return false;
}
}
は、ホームコントローラは、この属性で修飾されていない場合でも、それはまだ呼び出されて、ユーザーがUID/PWDの入力を求められている、ということです。
タグはフィルタ設定に登録されているときに実行されますか?それが私自身(一見)実行するのを防ぐ方法がありますか?
EDIT
私はフィルタはグローバルに登録していました。私はすべてのフィルターを使用する前に登録しなければならないと思ったので、この全体が私の理解に欠けていました!
public class FilterConfig {
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
//filters.Add(new AdminOnlyAttribute());
}
}
これは、設計したものに対してロールを使用しただけであれば、はるかに簡単になります。管理者ロールを作成し、管理者ロールパラメータと共に標準のAuthorize属性を使用します。これは、標準のauthorize属性がデータベースへのアクセスを行わないため、さらに優れたパフォーマンスを発揮します。 –
@ErikFunkenbuschそれはもっと簡単ですが、私たちは別のアクティブなディレクトリグループに敬意を表しています。 –