2010-08-26 32 views
3

在控制器和操作上[Authorize]上的属性限制访问是非常棒的。可能在ASP.NET MVC 2的区域级[授权]?

是否有可能为MVC 2中的整个区域做同等操作?在哪里我可以限制区域范围内的访问取决于角色/用户/无论在中心位置,而不是乱丢所有控制器?

回答

7

您可以使用装有该属性的基础控制器,该区域中的所有控制器都来自该属性。

+0

*额头掴*那一定会做到这一点!谢谢! – kdawg 2010-08-27 19:08:12

1

对于MVC 3及以上:

我刚开始对这个......但到目前为止,这是为我工作不错。

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

在CustomAuthorizeAttribute我检查基于它在该地区的各种条件。

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; 
    } 
}