在 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"> 2)利用 Web.config 來實現文件或URL授權,即對 Admin 目錄下的設置訪問規則(可以利用 VS 2005 中的 ASP.NET 配置來實現),完成後如下所示: <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="*"> 由於 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,user"> |
webConfig和SiteMap中Role的困惑和功能(網上轉載)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.