webConfig和SiteMap中Role的困惑和功能(網上轉載)

在 ASP.NET 2.0 的 Web.sitemap 文件中,siteMapNode 有個屬性 roles ,乍一看,就象是設置此結點允許哪些角色可以訪問/顯示,如:

<siteMapNode url="~/Admin/Default.aspx" title="系統管理" description="" roles="Manager"> 好象就表示屬於 Manager 角色的用戶可以訪問/顯示。但我在使用的時候卻發現,無論當前用戶是否登錄,是否屬於 Manager 角色,這個菜單項都能正常顯示,且能正常進入,那這個 roles 屬性的意義到底在哪裏呢?

後來查了一下才發現,要想達到我說的效果(即根據用戶的角色自動顯示/隱藏菜單項),必須進行如下兩個步驟:

1) Web.Config 的 SiteMap 中啓用安全修整,完成後如下所示:

<siteMap defaultProvider="default">
   <providers>
     <clear/>
     <add name="default" type="System.Web.XmlSiteMapProvider" siteMapFile="web.sitemap" securityTrimmingEnabled="true" />
   </providers>
</siteMap>

2)利用 Web.config 來實現文件或URL授權,即對 Admin 目錄下的設置訪問規則(可以利用 VS 2005 中的 ASP.NET 配置來實現),完成後如下所示:

<system.web>
   <authorization>
     <allow roles="Manager" />
     <deny users="*" />
   </authorization>
</system.web>

現在菜單終於可以自動根據用戶的角色是否屬於 Manager 來顯示/隱藏了,但問題是,這好象完全是 Web.config 來設置的,和 siteMapNode 中的 roles 一點關係也沒有,那這麼 roles 的意義在哪裏呢?

從 MSDN 中找出這麼一段話:“當用戶屬於 roles 屬性中列出的某一角色時,使用該屬性後,ASP.NET 可避開與 siteMapNode 關聯的 URL 授權限制。”,可是如果我想避開限制的話,我就根本不用在 Web.config 中設置。既然在 Web.config 中設置了限制,卻又在這裏用 roles 繞開限制,是不是吃飽沒事幹了?

現在唯一能爲這個 roles 找到一個很小的用處就是,如果結點上不指定 url 屬性,可以利用此屬性(roles="*")來強制顯示此結點,以便能夠顯示下一級結點,如:

<siteMapNode url="" title="系統管理" description="" roles="*">
     <siteMapNode url="~/Admin/Member_List.aspx" title="用戶管理" description=""/>
     <siteMapNode url="~/Admin/Role_List.aspx" title="角色配置" description="" />
</siteMapNode>

由於 url 沒有值,所以只要 Admin 目錄下利用 web.config 設置了授權規則,安全調整在檢查時會隱藏“系統管理”這個結點,但設置了 roles="*" 後,可以強制顯示此結點,這樣下面的兩個子結點(菜單項)也能正常根據角色來顯示。但是,這個理由也不充分,因爲將 url 設置成 "~/Admin" ,也能達到上述效果。

那麼,siteMapNode 結點中的這個 roles 屬性的作用到底在哪裏呢?

 

SiteMap和Web.config中的Role的區別:

在sitemapnode的roles中設置你想要access(操作)這個節點的角色名,比如:
<siteMapNode url="~/Admin/Default.aspx" title="系統管理" description="" roles="Manager">
只有manager才能看到這個節點

sitemaproles用於visibility (顯示)
web。config的location用於access (操作)

這個道理很簡單,我來解釋一下,主要是用於項目中的受限用戶對某個頁面鏈接沒有權限還是需要讓該用戶看到的情況,比如,當會員登陸後,他的個人界面有一個菜單,菜單中有所有可以看到的功能,但是有些功能他必須付費後才能使用,那麼就必須設置roles屬性了。就象這樣子可以讓user組的成員可以看到系統管理的鏈接
<siteMapNode url="~/Admin/Default.aspx" title="系統管理" description="" roles="Manager,user">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章