ASP.NET 2.0的會員、角色及配置問題的探討

來源:互聯網
上載者:User
asp.net|問題 一、 簡介

  在本文中,我們將主要探討ASP.NET 2.0的會員、角色和配置問題。ASP.NET中的會員系統提供了一個可程式化API用於建立和系統管理使用者賬戶,而其中的角色部分使開發人員能夠定義一組角色並把使用者與角色相關聯。典型地,一個提供使用者賬戶的網站都具有只為某些使用者、認證使用者或屬於特定角色的使用者所存取的內容部分。

  例如,一個Web網站可能有一組頁面-它允許一個信任使用者編輯該Web網站的內容或管理已有使用者。不是簡單地試圖隱藏這個頁面並且希望沒有人偶然在瀏覽它時遇到麻煩,或寫入程式碼授權而僅允許單個使用者;一種更為強壯和安全的方式是定義一個管理員角色-然後賦給他一組選出來的信任使用者。然後,這些管理web頁面被進一步配置以允許僅對那些具有管理員角色的使用者可以存取。同樣,該Web網站可能包含一組只有認證使用者可以存取的頁面。

  既然該網站的某些部分可能只能為某些使用者所存取,那麼,這就使得我們在網站導覽時有點進退兩難。我們是否要包括那些只有授權使用者才能在Web網站的網站地圖中存取的頁面?如果我們這樣做了,那麼所有的使用者將會在該網站的菜單或樹視圖中看到受限制的頁面。為什麼不能向存取它們的使用者顯示指向這些頁面的連結呢?如果我們從網站地圖上刪除了這些受限制的頁面,那麼那些來觀看這些頁面的授權使用者就無法容易地導航到它們,因為它們不是網站地圖的一部分,並因此不會出現在該網站的樹視圖或菜單中!

  值得慶幸的是,ASP.NET 2.0的網站導覽提供了一種稱為安全性修剪的特性。當用支援安全性修剪的功能獲得網站地圖資訊時,只有那些當前登入的使用者具有訪問授權的網站地圖結點才是可用的。這意味著,網站的TreeView或Menu將僅包含為當前登入使用者可存取的那些部分。要想瞭解怎樣配置網站導覽以支援安全性修剪,請接著往下讀!


  二、 配置ASP.NET 2.0的會員和(可選)角色

  既然網站導覽安全性修剪把網站地圖資料基於訪問頁面的使用者和為網站地圖中的頁面定義的授權設定,那麼在我們可以分析安全性修剪之前,你必須首先配置你的Web網站以使用ASP.NET 2.0的會員服務功能。(你也可以配置該網站來使用角色,並使用基於角色的授權優點,但是這對於展示安全性修剪概念並不作要求。)至於詳細討論怎樣配置一網站以使用會員和角色已經超出了本文的範圍。

  在本文最後的下載中包括一個可用執行個體-它實現為一個Web網站安全地修剪網站地圖。該網站實現了會員和角色。如果你不想在一個新的Web網站上花費時間來安裝會員和角色特性的話,你可以使用它。具體地說,在本文後面可下載的Web網站中包含兩個角色-管理員(Administrator)和測試員(Tester),並有四個使用者:

  ·Superman,其角色為管理員和測試者
  ·Admin,其角色為管理員
  ·Mr.Tester,其角色為測試者
  ·Average User,沒有任何角色

  而且,我在該工程中有三個檔案夾:Admin,Tester和AuthUsersOnly。前兩個檔案夾已經被配置僅允許具有管理員和測試者角色的使用者存取。AuthUsersOnly檔案夾被限制僅用於認證的使用者。

三、 配置網站導覽以使用安全性修剪

  預設地,網站導覽並不使用安全性修剪。不管什麼使用者正在訪問網站,並且不管定義什麼樣的授權規則,當每個使用者通過一TreeView或菜單Web控制項來觀看網站地圖資料時,他都被可以看到網站地圖中的所有部分。通過啟動安全性修剪,網站導覽系統將自動地基於當前登入的使用者和為網站地圖中的<siteMapNode>元素所參考的頁面的授權而限制顯示結果。

  可以使用下列模式通過Web.config檔案來配置網站導覽設定:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
  description="Default SiteMap provider."
  type="System.Web.XmlSiteMapProvider"
  siteMapFile="siteMapFileName"
  securityTrimmingEnabled="true" />
</providers>
</siteMap>

  回想一下在本系列第一部分中的討論-網站導覽系統使用了提供者模型。這個模型提供給開發人員一些良好定義的公用API,但是允許(如果需要的話)定製內部實現細節。預設地,網站導覽特點使用XmlSiteMapProvider-它從XML格式化的網站地圖檔Web.sitemap中獲得網站地圖資訊。你可以通過Web.config檔案來改變所使用的提供者,或修改針對預設提供者的預設設定。

  為了定製預設提供者的設定,只要簡單地添加一新的提供者-它使用與預設提供者(System.Web.XmlSiteMapProvider)相同的類型來定製所需要的設定。上面顯示的程式碼片段展示了定製兩個XmlSiteMapProvider的設定:

  ·siteMapFile設定指定由提供者所使用的網站地圖檔的檔案名稱;預設地,這個值是Web.sitemap。你如果喜歡,可以在此定製檔案名稱。但是,我鼓勵你確保網站地圖檔名以.sitemap副檔名結尾,因為預設地這個副檔名被ASP.NET引擎保護,從而阻止web訪問者觀看網站地圖檔。

  ·securityTrimmingEnabled設定顯示是否使用安全性修剪。為了使用安全性修剪,可以把它設定為true,如上面所示。

  就是這些!僅需作此改變,網站導覽系統就會根據當前登入的使用者和為在<siteMapNode>元素中的URL定義的授權設定非常聰明地返回正確的部分。下列螢幕快照顯示了當分別在匿名訪問者(還沒有登入的)、普通使用者以及Admin使用者訪問時的TreeView的顯示情況。該匿名訪問者僅能看到兩個連結-Home和 My Blog。普通使用者能看到另外的一個連結-Auth Users,而匿名訪問者是看不到它的,因為這個結點的url(/~/AuthUsers/Default.aspx)被配置為僅允許認證使用者觀看。Admin使用者還能看到另外其它連結,因為他是管理員角色並且為Admin網站地圖結點(~/Admin/Default.aspx)所指向的URL被配置僅允許由管理員存取。

四、 用角色屬性阻止安全性修剪

  可能有一些時候-你想要顯式地通知安全性修剪不要為一個特別的角色或一組角色修剪一個網站地圖部分。例如,如果你的網站地圖包含一個到外部資源的連結,那麼該網站導覽系統不可能針對這個遠端資源確定授權規則。因此,它為所有的使用者修剪該結點。也就是說,如果你啟動了安全性修剪功能並且在用一外部連結(如<siteMapNode url="http://www.scottonwriting.net/sowBlog/" title="My Blog"/>)使用一個網站地圖,那麼,沒有使用者會在TreeView或Menu控制項中看到這些。然而,你可能想要讓該網站導覽系統為那些具有Administrator和Tester角色的使用者顯示這一結點。(或不考慮任何使用者的角色。)

  同樣,即使他們沒有被授權存取該資源,你也可能想向這些使用者顯示一個局部網站地圖結點。例如,一訪問該網站卻還沒有登入的使用者肯定不會看到在TreeView中的Admin連結。然而,我們仍可能想顯示之。點擊它將會使使用者被導航到~/Admin/Default.aspx頁面,此時,系統將看到他們沒有被認證。這將把他們引導到登入頁面。在登入後,他們將被自動地引導回Admin頁面。如果他們不是管理員角色,他們將被送回到登入頁面,否則他們將被同意存取Admin部分。

  為了不修剪針對一個特定的網站地圖結點的特別角色,可以使用在相應的<siteMapNode>元素中的角色屬性。(注意:這一設定不會應用到descendent<siteMapNode>元素;也就是說,對那些顯式地指定另外的應該看到該結點的角色,你必須顯式地在每一個<siteMapNode>元素上設定這一屬性)。此角色屬效能包含一個角色名稱,一個用逗號間隔列表的角色名稱字,或一個星號(*)來表示所有的使用者。包含在本文末尾的下載檔案中的下列網站地圖檔顯示出怎樣使用角色屬性來使得所有的使用者擁有一個外部的網站地圖結點參考。(可以聯想到,當啟動安全性修剪功能時,如果在此忽略角色屬性,這將導致不向任何使用者顯示這個網站地圖結點。)>

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Default.aspx" title="Home">
<siteMapNode url="~/About.aspx" title="About" />
<siteMapNode url="~/Admin/Default.aspx" title="Admins" />
<siteMapNode url="~/Tester/Default.aspx" title="Tester" />
<siteMapNode url="~/AuthUsers/Default.aspx" title="Auth Users Only" />
<!-- For links to outside resources, need to explicitly define what
roles should be shown this section -->
<siteMapNode url="http://www.scottonwriting.net/sowBlog/" title="My Blog"
roles="*" />
</siteMapNode>
</siteMap>

  該角色屬性還可以用於在安全性修剪功能性上增加一些效能改進。在啟動了安全性修剪功能後,網站導覽提供者為所有的定義在網站地圖中的結點自動地檢查授權規則。對於那些你想要向所有的使用者顯示的結點,通過添加roles="*",你可以繞過這一檢查,如上例中所示。通過添加這個屬性,你會短路正常的授權檢查,從而改進安全性修剪效能。


  五、 結論

  除了提供網站導覽支援外,ASP.NET 2.0還使得構建包括使用者帳戶支援和基於角色的授權的Web網站非常容易。隨之而來的並不令人感到驚奇-這兩個系統可以互操作並且提供一個網站地圖-其返回內容是基於當前登入的使用者和定義在網站地圖中的URL的授權設定。配置網站導覽以限制基於訪問使用者和授權設定的結果就象把一些代碼添加Web.config檔案一樣地容易。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.