所以我有一个mvcsitemap:
open(5, file=trim(filename))
我想要做的是当网站加载时我想设置"角色"每个节点的属性与数据库中的值相关联。例如:
我希望可以从角色访问Home节点:Admin,User 我希望可以从角色访问Page2节点:用户
答案 0 :(得分:2)
根据documentation,roles属性用于ASP.NET的iteroperability。它不应该用于MVC安全性,主要是因为MVC不保护物理页面,而是MVC保护资源(通常是控制器动作)。 ASP.NET安全方案基于底层文件系统,因此完全不适合与MVC一起使用。
MVC安全性基于AuthorizeAttribute
。您可以将AuthorizeAttribute
子类化以提供所需的任何安全方案,包括在每次往返时从数据库中读取设置(如果这是您真正想要的)。有关此类方法,请参阅this article。
但请注意,默认的AuthorizeAttribute
实现支持控制器操作的角色和用户,这将是一个性能更好的解决方案。
[Authorize(Roles="Administrators,SuperUsers")]
public ActionResult ChangePassword(ChangePasswordModel model)
{
...
}
一旦您将安全性建立在AuthorizeAttribute
(或AuthorizeAttribute
的子类)上,MvcSiteMapProvider
就会自动与之互动。您唯一需要做的就是turn on security trimming。
内部DI(web.config)
<appSettings>
<add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="true"/>
</appSettings>
外部DI(MvcSiteMapProvider模块)
bool securityTrimmingEnabled = true; // Near the top of the module
答案 1 :(得分:1)
不确定你看起来是什么,但你能在你的视野中做一个条件吗?像这样
@if (this.User.IsInRole("Admin")){ <mvcSiteMapNode title="Page2"
controller="Page2" action="Index"/>} else
if(this.User.IsInRole("User"))....