ASP.NET2.0:SiteMaps

來源:互聯網
上載者:User

Asp.net首頁連結了一篇文章 Creating Menu Based on Role,主要講述了根據不同角色和授權,顯示不同的menu。感覺其解決方案並不是很好,其實ASP.NET 2.0 的SiteMaps特性內建就有Site-Map Security Trimming功能,就是根據角色和授權,menu顯示不同項,完全是基於配置的,不用編碼,並不用像前篇文章實現的那樣繁瑣。

複述一下文章中的情境,假設網站中有2個角色:Administrators, Users。

Administrators可訪問路徑為

Admins-/AddUser.aspx

         /DeleteUser.aspx

         /ModifyUser.aspx

Users的可訪問路徑為

Users-/ShowDetail.aspx

        /ShowList.aspx

       /......

需要根據使用者登入后角色的判斷顯示不同的menu。

實現方式:一,可以使用SiteMap的Multiple Site Maps功能(像文章中那樣);二,也完全可以不用。

方式一:

web.sitemap檔案如下配置
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="Default.aspx" title="Home"  description="Home">
    <siteMapNode siteMapFile="~/Navigation/Admin.sitemap" />
    <siteMapNode siteMapFile="~/Navigation/User.sitemap" />
  </siteMapNode>

Navigation目錄下Admin.sitemap, User.sitemap分別為:

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

  <siteMapNode url="" title="AdminFunctions" roles="administrators">
    <siteMapNode url="~/Admin/AddUser.aspx" title="Add User" />
    <siteMapNode url="~/Admin/DeleteUser.aspx" title="Delete User" />
    <siteMapNode url="~/Admin/UpdateUser.aspx" title ="Update User"/>
  </siteMapNode>
</siteMap>

 

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 <siteMapNode url="" title="UserFunctions" roles="users">
    <siteMapNode url="Showmydetails.aspx" title="Show my details" />
    <siteMapNode url="Editmydetails.aspx" title="Edit my details" />
  </siteMapNode>
</siteMap>

注意紅色的兩行只是為了起分組的作用,並不對應實際的地址,所以url為空白。

web.config中啟用securith trimming:

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

其實以上配置做完後只要正確使用了navigation控制項(treeview,menu等),就已經起到了根據不同角色、授權,顯示不同menu的作用了。但是要實現真正的授權控制還學要在web.config中配置,如:

  <location path="Admin">
    <system.web>
      <authorization>
        <allow roles="administrators" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>。

方式二:

不使用Multiple Site Maps功能,簡單說就是只是用一個web.sitemap檔案就可以了,

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="Default.aspx" title="Home"  description="Home">
      <siteMapNode url="" title="AdminFunctions" roles="administrators">
        <siteMapNode url="~/Admin/AddUser.aspx" title="Add User" />
        <siteMapNode url="~/Admin/DeleteUser.aspx" title="Delete User" />
        <siteMapNode url="~/Admin/UpdateUser.aspx" title ="Update User"/>
    </siteMapNode>
     <siteMapNode url="" title="UserFunctions" roles="users">
       <siteMapNode url="Showmydetails.aspx" title="Show my details" />
       <siteMapNode url="Editmydetails.aspx" title="Edit my details" />
     </siteMapNode>
  </siteMapNode>
</siteMap>

其他和前一種方式一樣。

總結:其實說了半天,要點就是應用Security Trimming功能,啟用了這個功能後,就不用像文章中那麼繁瑣的實現這個功能了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.