熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET2.0導航功能之配置會員和角色

2013-11-13 10:23:21  來源: .NET編程 
   作者朱先忠

   簡介

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

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

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

  值得慶幸的是ASPNET 的站點導航提供了一種稱為安全性修剪的特性當用支持安全性修剪的功能獲得站點地圖信息時只有那些當前登錄的用戶具有訪問授權的站點地圖結點才是可用的這意味著站點的TreeView或Menu將僅包含為當前登錄用戶可存取的那些部分要想了解怎樣配置站點導航以支持安全性修剪請接著往下讀!

   配置ASPNET 的會員和(可選)角色

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

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

  ·Superman其角色為管理員和測試者

  ·Admin其角色為管理員

  ·MrTester其角色為測試者

  ·Average User沒有任何角色

  而且我在該工程中有三個文件夾AdminTester和AuthUsersOnly前兩個文件夾已經被配置僅允許具有管理員和測試者角色的用戶存取AuthUsersOnly文件夾被限制僅用於認證的用戶

   配置站點導航以使用安全性修剪

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

  可以使用下列模式通過nfig文件來配置站點導航設置

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

  回想一下在本系列第一部分中的討論站點導航系統使用了提供者模型這個模型提供給開發者一些良好定義的公共API但是允許(如果需要的話)定制內部實現細節缺省地站點導航特點使用XmlSiteMapProvider它從XML格式化的站點地圖文件Websitemap中獲得站點地圖信息你可以通過nfig文件來改變所使用的提供者或修改針對缺省提供者的缺省設置

  為了定制缺省提供者的設置只要簡單地添加一新的提供者它使用與缺省提供者(SystemWebXmlSiteMapProvider)相同的類型來定制所需要的設置上面顯示的代碼片段展示了定制兩個XmlSiteMapProvider的設置

  ·siteMapFile設置指定由提供者所使用的站點地圖文件的文件名缺省地這個值是Websitemap你如果喜歡可以在此定制文件名但是我鼓勵你確保站點地圖文件名以sitemap擴展名結尾因為缺省地這個擴展名被ASPNET引擎保護從而阻止web訪問者觀看站點地圖文件

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

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


ASP.NET2.0導航功能之配置會員和角色(2)
 
當由匿名訪問者訪問時的TreeView
 
ASP.NET2.0導航功能之配置會員和角色(2)
 
為普通用戶訪問時的TreeView
 
ASP.NET2.0導航功能之配置會員和角色(2)
 
為Admin訪問時的TreeView
 

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

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

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

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

   <siteMap xmlns=File
<siteMapNode url=~/Defaultaspx title=Home
<siteMapNode url=~/Aboutaspx title=About />
<siteMapNode url=~/Admin/Defaultaspx title=Admins />
<siteMapNode url=~/Tester/Defaultaspx title=Tester />
<siteMapNode url=~/AuthUsers/Defaultaspx title=Auth Users Only />
<! For links to outside resources need to explicitly define what
roles should be shown this section
<siteMapNode url= title=My Blog
roles=* />
</siteMapNode>
</siteMap>

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

   結論

  除了提供站點導航支持外ASPNET 還使得構建包括用戶帳戶支持和基於角色的授權的Web站點非常容易隨之而來的並不令人感到驚奇這兩個系統可以互操作並且提供一個站點地圖其返回內容是基於當前登錄的用戶和定義在站點地圖中的URL的授權設置配置站點導航以限制基於訪問用戶和授權設置的結果就象把一些代碼添加nfig文件一樣地容易


From:http://tw.wingwit.com/Article/program/net/201311/13448.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.