默认情况下不启用安全修整。您需要做的第一件事就是打开它。
内部 DI (web.config):
<add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="true"/>
外部 DI(在 MvcSiteMapProvider 模块中):
bool securityTrimmingEnabled = true; // First line in the module
然后,您应该将 MVC [Authorize] 属性放在您想要保护的每个操作方法上。在 MVC4+ 中,你也可以把它放在控制器级别,或者全局注册,然后使用 [AllowAnonymous] 属性选择性地允许未经身份验证的用户允许操作方法。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
}
}
[Authorize(Roles="Admin,Manager")]
public class MyController
{
// Everyone has access
[AllowAnonymous]
public ActionResult Index()
{
return View();
}
// Only Admin and Manager roles have access, everyone else is denied
public ActionResult About()
{
return View();
}
}
XML 中的角色属性是为了向后兼容 ASP.NET。对于 MVC,唯一真正的安全性是使用 [Authorize] 属性(或通过为您自己的方案继承它),因为它是保证不能通过备用路由访问资源的唯一方法。