我正在尝试构建一个自定义AuthorizeAttribute
,以便在我的MVC应用程序中使用。标签将检查Users表,并查看用户是否是管理员。很简单。
[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;
}
}
令我感到困惑的是,即使Home控制器没有使用此属性进行修饰,它仍然会被调用,并且系统会提示用户输入UID / PWD。 p>
标签在过滤器配置中注册后是否执行?有没有办法阻止它自己执行(貌似)?
修改
我在全球范围内注册了过滤器。我认为所有过滤器都必须在使用之前进行注册,所以这一切都是我缺乏理解的!
public class FilterConfig {
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorAttribute());
//filters.Add(new AdminOnlyAttribute());
}
}
答案 0 :(得分:1)
当您将其注册为全局过滤器时,它将适用于您网站的任何位置。您可以通过使用[AllowAnonymous]
属性修饰控制器/方法来覆盖它。