我有一个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>
答案 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">
这阻止了一切消失,虽然我不明白为什么。我没有显示网址,所以任何一个成功的人都可以做到这一点。