在控制器和操作上[Authorize]
上的属性限制访问是非常棒的。可能在ASP.NET MVC 2的区域级[授权]?
是否有可能为MVC 2中的整个区域做同等操作?在哪里我可以限制区域范围内的访问取决于角色/用户/无论在中心位置,而不是乱丢所有控制器?
在控制器和操作上[Authorize]
上的属性限制访问是非常棒的。可能在ASP.NET MVC 2的区域级[授权]?
是否有可能为MVC 2中的整个区域做同等操作?在哪里我可以限制区域范围内的访问取决于角色/用户/无论在中心位置,而不是乱丢所有控制器?
您可以使用装有该属性的基础控制器,该区域中的所有控制器都来自该属性。
对于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;
}
}
*额头掴*那一定会做到这一点!谢谢! – kdawg 2010-08-27 19:08:12