【问题标题】:Can the MvcSiteMap work like the one in WebFormsMvcSiteMap 可以像 WebForms 中的那样工作吗
【发布时间】:2012-06-15 04:06:21
【问题描述】:

在 webforms 中,如果某个用户无法访问某个路径,它将被隐藏,这可以通过 MvcSiteMap 来完成吗?

https://github.com/maartenba/MvcSiteMapProvider

在 Webforms 中,您需要做的只是

  <location path="SomePath">
    <system.web>
      <authorization>
        <allow roles="SomeRole" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>

如果你不属于 SomeRole 菜单项将被隐藏,可能在 MvcSiteMap 中?

【问题讨论】:

    标签: asp.net-mvc authorization asp.net-mvc-sitemap


    【解决方案1】:

    在 ASP.NET 中,定义授权的推荐方法是使用 AuthorizeAttribute

    启用securityTrimming 时,MvcSiteMapProvider 完全支持AuthorizeAttribute。见Registering the provider

    【讨论】:

    • 因此,如果您想更改哪些角色可以访问某个区域,您必须重新编译该站点?我更喜欢 WebForms 解决方案。哦,好吧
    • @Anders - WebForms 解决方案基于每个网页作为文件存在于物理世界中的事实。在 MVC 中,没有文件。因此,基于物理目录路径配置安全性将毫无意义。 MVC 基于控制器操作方法返回的资源。 AuthorizeAttribute 旨在通过阻止操作发生来确保 MVC 资源仅对授权用户可用。这是 MVC 中唯一真正衡量安全性的方法(无论您认为它有多“方便”)。请注意,ASP.NET 5 现在在代码中提供了所有配置。
    【解决方案2】:

    我知道这是一篇旧帖子,但以防万一其他人发现它,您可以通过将角色属性添加到您注册节点的 mvc.sitemap 文件来明确实现您正在寻找的内容。不属于该角色的任何人都无法看到具有该属性的节点。

    <mvcSiteMapNode title="TheMenuOption" clickable="false"  roles="someRole">
    

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多