安全修整SiteMap时如何影响单个子节点?
-
05-07-2019 - |
题
我有一个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>
解决方案
已排序 - 您需要在Web.config文件中设置页面的授权,如下所示:
<location path="Documents/Upload.aspx">
<system.web>
<authorization>
<allow roles="DOMAIN\madeuprole"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
我尝试使用路径&quot;〜/ Documents / Upload.aspx&quot;
,但这不起作用 - 它需要是相对于配置文件的路径。
另外,我必须在我的站点地图节点中放置一个URL,如下所示:
<siteMapNode title="Documents" roles="*" url="Made-Up.aspx">
这阻止了一切消失,虽然我不明白为什么。我没有显示网址,所以任何一个成功的人都可以做到这一点。
不隶属于 StackOverflow