2009-11-27 41 views
1

我有一个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> 

回答

1

排序 - 你需要授权设立在Web页面。配置文件是这样的:

<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"> 

这一切停止消失,虽然我不知道为什么。我没有显示网址,因此任何制作的人都可以操作。