【问题标题】:SiteMap based on user roles doesn't work基于用户角色的站点地图不起作用
【发布时间】:2012-03-28 09:22:40
【问题描述】:

我的站点地图如下所示:

    <?xml version="1.0" encoding="utf-8" ?>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
   <siteMapNode url="~/default.aspx" title="Prva stran" roles="*"  description="Shema ISEF">    
        <siteMapNode roles="2" title="Analize" id="Analize"  description="" >
             <siteMapNode url="~/karneki1.aspx" title="Karneki1"  description="" />
             <siteMapNode url="~/karneki2.aspx" title="Karneki2"  description="" />    
        </siteMapNode>
    </siteMapNode>
</siteMap>

如果我在标题为“Analiza”的 siteMapNode 中设置角色,它工作正常,链接不会显示在导航中......但如果我在任何“karneki”siteMapNode 上设置角色,链接仍然可见......

是否甚至可以根据用户角色限制对较低链接的访问?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    使用 SiteMap 的“securityTrimmingEnabled”属性:

    http://msdn.microsoft.com/en-us/library/ms178428.aspx

    asecurityTrimmingEnabled 属性也需要添加到标记中的节点:

    http://weblogs.asp.net/jgalloway/archive/2008/01/26/asp-net-menu-and-sitemap-security-trimming-plus-a-trick-for-when-your-menu-and-security-don-t-match-up.aspx

    securityTrimmingEnabled 应该如何工作的概述:

    http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx

    【讨论】:

    • 异常详细信息:System.Configuration.ConfigurationErrorsException:无法识别的属性“securityTrimmingEnabled”。请注意,属性名称区分大小写。
    • 好的,我取得了一些进展...角色只有在 sitemapnode 中没有 url 属性时才起作用...任何线索?
    • 您使用的是什么版本的 ASP.NET?我记得之前在 2.0 中遇到过这个问题。最终,我不得不自己以编程方式添加一个“角色”属性并将其绑定到我的会员系统中。我有另一个“角色类型”属性来区分 Active Directory 和会员系统。稍等...尝试将“securityTrimmingEnabled”中的“S”大写?让我知道这是否有效?
    • 只是想添加一条评论说我试过这个并认为它没有工作但实际上我没有正确实施它。如果您在文件夹中有一个页面,并且您想将文件夹的访问权限授予组 A + B,但访问该页面的权限仅授予组 B,则在 Web.config 中,您需要将文件夹权限放在页面访问权限之前.
    【解决方案2】:

    解决方案是您需要在 Web.config 中为页面本身设置角色。

    http://weblogs.asp.net/jgalloway/archive/2008/01/26/asp-net-menu-and-sitemap-security-trimming-plus-a-trick-for-when-your-menu-and-security-don-t-match-up.aspx

    例如在名为 AdminOnly.aspx 的页面的文件夹中添加一个 Web.Config,其中包含以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="AdminOnly.aspx">
        <system.web>
          <authorization>
            <allow roles="Administrator"/>
            <deny users="*" />
          </authorization>
        </system.web>
      </location>
    </configuration>
    

    【讨论】:

      【解决方案3】:

      尝试像这样将角色添加到站点地图

      <?xml version="1.0" encoding="utf-8" ?>
      <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
        <siteMapNode url="~/default.aspx" roles="*" title="Prva stran" roles="*"  description="Shema ISEF">
          <siteMapNode roles="2" title="Analize" id="Analize"  description="" >
            <siteMapNode roles="*" url="~/karneki1.aspx" title="Karneki1"  description="" />
            <siteMapNode roles="*" url="~/karneki2.aspx" title="Karneki2"  description="" />
          </siteMapNode>
        </siteMapNode>
      </siteMap>
      

      【讨论】:

        猜你喜欢
        • 2011-02-09
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 2015-10-08
        • 1970-01-01
        • 2020-02-13
        • 2020-03-13
        相关资源
        最近更新 更多