站點導航的安全性
站點導航特性可以根據授權規則過慮提供程序所返回的sitemapnode實例。xmlsitemapprovider可以根據當前網站使用的文件和url授權規則過慮節點。
下面的例子使用了窗體授權規則,預定義的用戶憑證存儲在web.config中。在global.asax中,根據用戶名,用戶的角色都被附加到當前的請求上。在web.config中,嵌套在元素之下的站點地圖提供程序使用的元素的securitytrimmingenabled屬性被設置為真。同時,web.config文件的末尾定義了一組url授權規則。當你運行示例并登陸之后,xmlsitemapprovider會自動地依據用戶所屬的角色和web.config中定義的授權規則來對sitemapnode執行授權檢測。
請使用下面三個帳戶之一運行示例:
· userid: sectionone password: sectionone
· userid: sectiontwo password: sectiontwo
· userid: allsections password: allsections
在頁面的右上角有一個"退出"鏈接,因此你可以用不同的帳號登陸和退出。請注意,根據你登陸所使用的帳號不同,導航ui顯示的treeview和menu控件會自動地反映該用戶所獲得的訪問權限。提供程序自動地過慮了返回的節點--實現這種功能不需要額外的代碼。用"sectionone"帳號登陸的時候,只在左邊的treeview控件中顯示"sectionone"鏈接和外部鏈接。用"sectiontwo"帳號登陸的時候,只在左邊的treeview控件中顯示"sectiontwo"鏈接和外部鏈接。用"allsections"帳號登陸的時候,treeview控件中顯示了所有的鏈接。web.config中的授權規則配置為給"sectionone"和"sectiontwo"層次授予了部分訪問權力。
這個示例還演示了如何處理應用程序目錄范圍之外的url安全性。在web.sitemap文件中,外部鏈接的節點使用了roles屬性。語法roles="*"授予所有用戶訪問和查看導航控件中的節點的權力。語法roles="adminstrators,regular users"只允許這些角色的用戶檢索和查看導航控件中的節點。由于在示例中global.asax文件把用戶分成了這兩種角色,所以你一直可以看到外部鏈接。
開發者可以選擇同時使用文件/url授權規則和roles屬性來控制用戶對sitemapnode實例的訪問權。如果兩者的設置信息都是正確的,站點導航提供程序就會根據文件/url授權規則和roles屬性中的角色來對當前用戶進行認證。如果當前用戶通過了任何一種授權檢查,就可以訪問節點。
如果默認的安全性操作不適用于你的應用程序,開發者還可以從xmlsitemapprovider衍生類,并用自定義的節點授權實現來重載isaccessibletouser方法。
web.config的內容
以下是引用片段:
<system.web>
<authentication mode="forms">
<forms name=".aspxauth" loginurl="login.aspx" protection="all" timeout="30" path="/" requiressl="false" slidingexpiration="true" defaulturl="home.aspx" cookieless="usecookies" enablecrossappredirects="false">
<credentials passwordformat="clear">
<user name="sectionone" password="sectionone"/>
<user name="sectiontwo" password="sectiontwo"/>
<user name="allsections" password="allsections"/>
</credentials>
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
<location path="sectionone.aspx">
<system.web>
<authorization>
<allow users="sectionone" roles="administrators" />
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="sectionone">
<system.web>
<authorization>
<allow users="sectionone" roles="administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="sectiontwo.aspx">
<system.web>
<authorization>
<allow users="sectiontwo" roles="administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="sectiontwo">
<system.web>
<authorization>
<allow users="sectiontwo" roles="administrators"/>
<deny users="*"/>
</authorization>
</system.web>
本地化站點地圖數據
存儲在sitemap文件中的導航數據可能需要進行本地化(localize)。元素中的url、title和description屬性也可以本地化。此外,開發者放置在元素中的任何自定義屬性也可以本地化。
下面的示例包含了英語和法語的本地化文本。它的web.sitemap文件使用兩種類型(隱式的和顯式的)的本地化表達式來實現這種功能。sitemap文件在根sitemap元素中使用了enablelocalization=true就表明它使用了本地化數據。
站點地圖文件的隱式表達式讓開發者能夠輕易地用查找鍵(lookup key)標記每個元素,而查找鍵是用于從資源文件檢索資源的。在示例的web.sitemap中,除了第一個節點之外,所有的節點都有隱式的資源表達式。它的語法類似resourcekey="autos"。當xmlsitemapprovider根據web.sitemap文件中的信息檢索sitemapnode的時候,它根據sitemapnode屬性的名稱、resourcekey和為提供程序配置的sitemapfile屬性的值來檢索字符串資源。使用示例中的"autos"節點的時候,提供程序(provider)會根據當前的文化來查找以"web.sitemap"開頭的資源文件。這意味著,對于一個發送法語頭信息的瀏覽器來說,提供程序會查找名稱為web.sitemap.fr.resx的資源文件。在這個資源文件中,提供程序會依據resourcekey + "." + [sitemapnode屬性名]來查找資源鍵。例如,把"autos"節點的title屬性當作例子,提供程序會在web.sitemap.fr.resx資源文件中查找鍵為autos.title的資源。
新聞熱點
疑難解答
圖片精選