MVC自定义授权属性行为

时间:2016-04-06 16:03:43

标签: asp.net-mvc

我正在尝试构建一个自定义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。

标签在过滤器配置中注册后是否执行?有没有办法阻止它自己执行(貌似)?

修改

我在全球范围内注册了过滤器。我认为所有过滤器都必须在使用之前进行注册,所以这一切都是我缺乏理解的!

public class FilterConfig {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
        filters.Add(new HandleErrorAttribute());
        //filters.Add(new AdminOnlyAttribute());
    }
}

1 个答案:

答案 0 :(得分:1)

当您将其注册为全局过滤器时,它将适用于您网站的任何位置。您可以通过使用[AllowAnonymous]属性修饰控制器/方法来覆盖它。