C# 是否可以在ASP.NET MVC 2中的区域级别进行[授权]?

C# 是否可以在ASP.NET MVC 2中的区域级别进行[授权]?,c#,asp.net-mvc-2,authorization,asp.net-mvc-areas,C#,Asp.net Mvc 2,Authorization,Asp.net Mvc Areas,在控制器上设置[Authorize]属性和限制访问的操作非常棒 在MVC2中,是否可以对整个区域执行等效操作?我可以根据角色/用户/中心位置的任何内容限制区域范围内的访问,而不是在所有控制器中乱扔它们?您可以使用带有此属性的基本控制器,该属性是该区域中所有控制器的来源。对于MVC 3及以上版本: 我刚开始做这个。。。但到目前为止,这对我来说非常有效 我创建了一个自定义AuthorizeAttribute类,并将其添加到RegisterGlobalFilters函数中 在CustomAttribu

在控制器上设置
[Authorize]
属性和限制访问的操作非常棒


在MVC2中,是否可以对整个区域执行等效操作?我可以根据角色/用户/中心位置的任何内容限制区域范围内的访问,而不是在所有控制器中乱扔它们?

您可以使用带有此属性的基本控制器,该属性是该区域中所有控制器的来源。

对于MVC 3及以上版本:

我刚开始做这个。。。但到目前为止,这对我来说非常有效

我创建了一个自定义AuthorizeAttribute类,并将其添加到RegisterGlobalFilters函数中

在CustomAttribute中,我根据它所在的区域检查各种条件

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

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var routeData = httpContext.Request.RequestContext.RouteData;
        var controller = routeData.GetRequiredString("controller");
        var action = routeData.GetRequiredString("action");
        var area = routeData.DataTokens["area"];
        var user = httpContext.User;
        if (area != null && area.ToString() == "Customer")
        {
            if (!user.Identity.IsAuthenticated)
                return false;
        }
        else if (area != null && area.ToString() == "Admin")
        {
            if (!user.Identity.IsAuthenticated)
                return false;
            if (!user.IsInRole("Admin"))
                return false;
        }
        return true;
    }
}