2010-08-26 31 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; 
    } 
}