最近的一个项目中,要求有一个Menu,不同的Role能访问到不同的Menu Node。
现在已经做好了Role,很自然看到sitemap里面有Roles这个属性可以输入,查一查,还支持逗号“,”分号“;”来区分不同的Role,恩,很好,至少现在看起来很好。
很快的整一下Sitemap,看上去像这样。
<?
xmlversion="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
>
很快的测试一下,发现不行,为什么?没写错丫……
把下列标记添加到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=<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">2.0.0</chsdate>.0, Culture=neutral, PublicKeyToken=b<chmetcnv w:st="on" unitname="F" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">03f</chmetcnv><chmetcnv w:st="on" unitname="F" sourcevalue="5" hasspace="False" negative="False" numbertype="1" tcsc="0">5f</chmetcnv><chmetcnv w:st="on" unitname="F" sourcevalue="7" hasspace="False" negative="False" numbertype="1" tcsc="0">7f</chmetcnv>11d<chmetcnv w:st="on" unitname="a" sourcevalue="50" hasspace="False" negative="False" numbertype="1" tcsc="0">50a</chmetcnv><chmetcnv w:st="on" unitname="a" sourcevalue="3" hasspace="False" negative="False" numbertype="1" tcsc="0">3a</chmetcnv>"
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
</system.web>
然后在Web.config实现URL授权,对啊,Roles的意义在哪里?等等,我们仔细看看系统,使用Role的情况下,往往系统是有一部分的页面只能被某些Role访问的,那么规范起见,我们往往将这些东西(模块)放在一个物理文件夹下,应为哪儿能放一个web.config,可以继承父目录的授权。
个人(person)目录下的web.config看上去应该是
<
system
.web
>
<
authorization
>
<
allow
roles
="user"
/>
<
deny
users
="*"
/>
</
authorization
>
</
system.web
>
更改了系统的物理结构、增加了web.config后,sitemap也会变成这样,那么之前需要的效果就达到了。
<?
xmlversion="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
>