我正在使用MVCSiteMapProvider,v4.6.1
这是我的问题:我的菜单部分仅供管理员查看。我通过启用安全修整和装饰我的控制器和/或控制器方法来定义修剪标准来实现这一目标。
AdminTasks
我需要做的是制作" AdminTasks"节点不可点击,但仅对管理员可见。
我观察的行为是,如果我标记" AdminTasks"作为站点地图中的clickable="false"
,无论用户是否为管理员,该节点都会显示给所有人。看起来,在标有clickable='false'
的节点中,没有执行安全修整。
我的假设是,在没有过多探索代码的情况下,当节点标记为clickable='false'
时,SiteMapProvider不会尝试解析任何路由(因为无论如何都不需要导航);但在这样做时,它不会检查控制器中的装饰,因此会跳过安全修整。
我的假设是否正确? 有没有办法让一个不可点击的节点仍然被安全修剪?
由于
答案 0 :(得分:3)
不可点击的“分组”节点不代表控制器操作,因此没有合理的方法来使用AuthorizeAttribute控制它们的安全性。
但是,如果没有可嵌入的节点嵌套在其中,则可以使用TrimEmptyGroupingNodesVisibilityProvider使不可点击的节点不可见。因此,如果当前用户没有“管理任务”节点的任何子节点的权限,则将隐藏“管理任务”节点。
<mvcSiteMapNode title="Admin Tasks" clickable="false" visibilityProvider="MvcSiteMapProvider.TrimEmptyGroupingNodesVisibilityProvider, MvcSiteMapProvider">
如果你的场景比这更复杂,你也可以build your own visibility provider。