奇怪的SiteMap

来源:互联网 发布:淘宝网月季花 编辑:程序博客网 时间:2024/06/08 14:35
最近的一个项目中,要求有一个Menu,不同的Role能访问到不同的Menu Node。
现在已经做好了Role,很自然看到sitemap里面有Roles这个属性可以输入,查一查,还支持逗号“,”分号“;”来区分不同的Role,恩,很好,至少现在看起来很好。
很快的整一下Sitemap,看上去像这样。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    
<siteMapNode url="" title="个人区" description="" roles="use,admin">
      
<siteMapNode url="~/personal.aspx" title="个人"/>
    
</siteMapNode>
    
<siteMapNode url="" title="管理区"  description="" roles="admin">
      
<siteMapNode url="~/manage.aspx" title="管理"/>
    
</siteMapNode>
</siteMap>
 
很快的测试一下,发现不行,为什么?没写错丫……
 
让我们很快的搜索一下,我得到了令人不解的 roles 属性。恩,在Web.Config的SiteMap中启用安全修正。
 

把下列标记添加到web.config文件中:

  <system.web>

……

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">

      <providers>

        <add name="XmlSiteMapProvider"

    description="SiteMap provider which reads in .sitemap XML files."

    type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

    siteMapFile="Web.sitemap"

    securityTrimmingEnabled="true"/>

      </providers>

    </siteMap>

  </system.web>

然后在Web.config实现URL授权,对啊,Roles的意义在哪里?等等,我们仔细看看系统,使用Role的情况下,往往系统是有一部分的页面只能被某些Role访问的,那么规范起见,我们往往将这些东西(模块)放在一个物理文件夹下,应为哪儿能放一个web.config,可以继承父目录的授权。
 
管理(admin)目录下的web.config 看上去应该是这样:
  <system.web>
    
<authorization>
      
<allow roles="admin"/>
      
<deny users="*"/>
    
</authorization>
  
</system.web>
 
个人(person)目录下的web.config看上去应该是
  <system.web>
    
<authorization>
      
<allow roles="user"/>
      
<deny users="*"/>
    
</authorization>
  
</system.web>
 
更改了系统的物理结构、增加了web.config后,sitemap也会变成这样,那么之前需要的效果就达到了。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    
<siteMapNode url="" title="个人区" description="" roles="use,admin">
      
<siteMapNode url="~/person/personal.aspx" title="个人"/>
    
</siteMapNode>
    
<siteMapNode url="" title="管理区"  description="" roles="admin">
      
<siteMapNode url="~/admin/manage.aspx" title="管理"/>
    
</siteMapNode>
</siteMap>