在控制器和操作上[Authorize]
添加属性以限制访问非常棒。
是否可以对 MVC 2 中的整个区域进行等效处理?在哪里可以根据角色/用户/中心位置的任何内容限制区域范围的访问,而不是在所有控制器中乱扔垃圾?
在控制器和操作上[Authorize]
添加属性以限制访问非常棒。
是否可以对 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;
}
}