我有一个 ASP.Net 站点,我在其中尝试使用 Windows 身份验证和 Active Directory 角色来限制对某些页面的访问。我查看了Scott Gu 的教程页面,但我无法完全实现我想要的。
我忽略了我的根节点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>