我有一个ASP.Net站点,我尝试使用Windows身份验证和Active Directory角色来限制对某些页面的访问。我看过一个tutorial page from Scott Gu,但我不能完全达到我想要的。安全修剪SiteMap时如何影响单个子节点?
我忽略了SiteMapDataSource
中的根节点。我想向所有用户显示“文档”节点,但将“搜索”和“上传”角色的显示限制为2个不同的角色。我在“DOMAIN \ validrole”中,但不在“DOMAIN \ madeuprole”中。通过下面的站点地图和web.config,我可以看到所有显示的节点。如果我从“文档”节点中删除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>