默認情況下,安全調整功能未啓用。你需要做的第一件事是打開它。
內部DI(web.config中):
<add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="true"/>
外部DI(在MvcSiteMapProvider模塊):
bool securityTrimmingEnabled = true; // First line in the module
那麼你應該把MVC [授權]屬性上每個動作方法你想要保護。在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中的roles屬性是爲了與ASP.NET向後兼容。對於MVC,唯一真正的安全性是使用[Authorize]屬性(或通過爲自己的方案繼承它),因爲它是保證資源無法通過替代路線訪問的唯一方法。
非常感謝 – SamJolly
我發現網站地圖中的Roles屬性對於鏈接外部資源的菜單很有用。它似乎完美與表單身份驗證。 –
@MattiasÅslund - 我改正了我的帖子。角色屬性適用於Forms身份驗證,因爲它是爲ASP.NET設計的。但是,ASP。NET安全性基於文件系統和/或對於MVC來說不夠好的URL(一個資源可以鏈接到多個URL,並且不一定涉及文件系統),所以您應該只使用roles屬性與ASP.NET的互操作性。 – NightOwl888