1

我正在使用 MVSiteMapProvider,v4.6.1

这是我的问题:我的菜单中有一部分只对管理员可见。我通过启用安全修剪和装饰我的控制器和/或控制器方法来定义修剪标准来实现这一点。

管理任务

  • 添加
  • 编辑
  • 消除

我需要做的是使“AdminTasks”节点不可点击,但仍然只对管理员可见。

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

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

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

谢谢

4

1 回答 1

3

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

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

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

如果您有比这更复杂的场景,您还可以构建自己的可见性提供程序

于 2014-05-22T14:54:22.377 回答