MVCSiteMapProvider:启用了安全修整的不可点击节点

时间:2014-05-21 15:42:14

标签: clickable mvcsitemapprovider securitytrimmingenabled

我正在使用MVCSiteMapProvider,v4.6.1

这是我的问题:我的菜单部分仅供管理员查看。我通过启用安全修整和装饰我的控制器和/或控制器方法来定义修剪标准来实现这一目标。

AdminTasks

  • 添加
  • 修改
  • 删除

我需要做的是制作" AdminTasks"节点不可点击,但仅对管理员可见。

我观察的行为是,如果我标记" AdminTasks"作为站点地图中的clickable="false",无论用户是否为管理员,该节点都会显示给所有人。看起来,在标有clickable='false'的节点中,没有执行安全修整。

我的假设是,在没有过多探索代码的情况下,当节点标记为clickable='false'时,SiteMapProvider不会尝试解析任何路由(因为无论如何都不需要导航);但在这样做时,它不会检查控制器中的装饰,因此会跳过安全修整。

我的假设是否正确? 有没有办法让一个不可点击的节点仍然被安全修剪?

由于

1 个答案:

答案 0 :(得分:3)

不可点击的“分组”节点不代表控制器操作,因此没有合理的方法来使用AuthorizeAttribute控制它们的安全性。

但是,如果没有可嵌入的节点嵌套在其中,则可以使用TrimEmptyGroupingNodesVisibilityProvider使不可点击的节点不可见。因此,如果当前用户没有“管理任务”节点的任何子节点的权限,则将隐藏“管理任务”节点。

<mvcSiteMapNode title="Admin Tasks" clickable="false" visibilityProvider="MvcSiteMapProvider.TrimEmptyGroupingNodesVisibilityProvider, MvcSiteMapProvider">

如果你的场景比这更复杂,你也可以build your own visibility provider