安全修整SiteMap时如何影响单个子节点?

时间:2009-11-27 09:20:04

标签: asp.net sitemap security-trimming

我有一个ASP.Net站点,我正在尝试使用Windows身份验证和Active Directory角色来限制对某些页面的访问。我看过一个tutorial page from Scott Gu,但我无法达到我想要的效果。

我忽略了SiteMapDataSource中的根节点。我想向所有用户显示“Documents”节点,但是将“Search”和“Upload”角色的显示限制为2个不同的角色。我在“DOMAIN \ validrole”中,但不在“DOMAIN \ madeuprole”中。使用下面的站点地图和web.config,我将显示所有节点。如果我从“Documents”节点中删除roles="*"(如Scott Gu所建议的那样),我就不会显示任何节点。

有没有办法可以限制各个子节点的显示而不必编写自定义代码?

这是我的站点地图:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
    <siteMapNode url="~/Default.aspx" 
                 title="Home">
        <siteMapNode title="Documents" roles="*">
            <siteMapNode url="~/Documents/Search.aspx" 
                         title="Search Documents" 
                         roles="DOMAIN\validrole" />
            <siteMapNode url="~/Documents/Upload.aspx" 
                         title="Upload Documents" 
                         roles="DOMAIN\madeuprole" />
            <siteMapNode url="~/Documents/Publish.aspx" 
                         title="Publish Documents" />
        </siteMapNode>
        <siteMapNode title="Users" roles="*">
            <siteMapNode url="~/Users/Search.aspx" 
                         title="Search Users" 
                         roles="DOMAIN\validrole" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

这是我的web.config的相关部分:

<authentication mode="Windows"/>
<authorization>
    <allow roles="DOMAIN\validrole"/>
    <deny users="*"/>
</authorization>

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
        <add name="XmlSiteMapProvider"
             description="Default SiteMap provider."
             type="System.Web.XmlSiteMapProvider"
             siteMapFile="Web.sitemap"
             securityTrimmingEnabled="true" />
    </providers>
</siteMap>

1 个答案:

答案 0 :(得分:1)

已排序 - 您需要在Web.config文件中设置页面的授权,如下所示:

<location path="Documents/Upload.aspx">
    <system.web>
        <authorization>
            <allow roles="DOMAIN\madeuprole"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

我用路径"~/Documents/Upload.aspx"尝试了这个,但是没有用 - 它需要是一个相对于配置文件的路径。

另外,我必须在我的站点地图节点中放置一个URL,如下所示:

<siteMapNode title="Documents" roles="*" url="Made-Up.aspx">

这阻止了一切消失,虽然我不明白为什么。我没有显示网址,所以任何一个成功的人都可以做到这一点。