Asp.net mvc 3 在MVC3中,如何使用基于角色的授权限制对区域的访问?

Asp.net mvc 3 在MVC3中,如何使用基于角色的授权限制对区域的访问?,asp.net-mvc-3,controller,authorization,asp.net-mvc-areas,role-base-authorization,Asp.net Mvc 3,Controller,Authorization,Asp.net Mvc Areas,Role Base Authorization,在MVC3中,我们可以使用[Authorize]属性限制对控制器的访问,指定用户必须具有管理员角色才能访问类中的任何控制器操作,如以下示例中所示 [Authorize(Roles = "Administrator")] public class MyDefaultController : Controller { // Controller code here } 但是,如何在MVC3中限制对整个区域的访问,而不为区域内的每个控制器类指定[Authorize]属性?您可以使用Route

在MVC3中,我们可以使用[Authorize]属性限制对控制器的访问,指定用户必须具有管理员角色才能访问类中的任何控制器操作,如以下示例中所示

[Authorize(Roles = "Administrator")]
public class MyDefaultController : Controller
{
    // Controller code here
}

但是,如何在MVC3中限制对整个区域的访问,而不为区域内的每个控制器类指定[Authorize]属性?

您可以使用RouteConstraint来执行此操作:

写一个这样的类:

       public class AreaRouteConstraint : IRouteConstraint
        {
            public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
            {
                return  Validate(values["area"];


            }
       }
实现
Validate
方法取决于您

然后像这样使用它:

 routes.MapRoute(
name: "yourRouteName",
url: "Url",
defaults: new { controller = "controller", action = "action" , area="area" },
constraints: new AreaRouteConstraint ()
);