ASP.NET 2.0 站點導航架構內建「安全性修剪」功能,依據目前登入使用者的身分與授權規則,自動過濾 SiteMapPath、TreeView、Menu 中無權存取的節點,實現導航介面與權限控制的無縫整合。
<membership>),建立使用者帳號。<roleManager>),定義角色(如 Administrators、Testers)並指派使用者。web.config <authorization> 區段設定資料夾/頁面存取規則。| 使用者 | 角色 |
|---|---|
| Superman | Administrators, Testers |
| Admin | Administrators |
| Mr.Tester | Testers |
| Average User | (無角色) |
資料夾授權:Admin 僅 Administrators、Tester 僅 Testers、AuthUsersOnly 所有已驗證使用者。
在 web.config 站點地圖提供者設定 securityTrimmingEnabled="true":
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default SiteMap provider."
type="System.Web.XmlSiteMapProvider"
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
節點可宣告 roles 屬性(逗號分隔),導航系統會交叉比對:
roles 指定的角色(若有設定)。<authorization> 規則允許存取。三者條件皆滿足,節點才顯示;否則自動隱藏(包含其子節點)。
<siteMapNode url="~/Admin/Default.aspx" title="Administration" description="Admin Area" roles="Administrators">
<siteMapNode url="~/Admin/Users.aspx" title="User Management" roles="Administrators" />
<siteMapNode url="~/Admin/Settings.aspx" title="Site Settings" roles="Administrators" />
</siteMapNode>
<siteMapNode url="~/Tester/Default.aspx" title="Testing" roles="Testers" />
<siteMapNode url="~/Members/Profile.aspx" title="My Profile" /> <-- 僅需驗證,無 roles 限制
SiteMapDataSource。XmlSiteMapProvider 載入站點地圖,建立節點樹。IsAccessibleToUser(HttpContext)。繼承 StaticSiteMapProvider 覆寫 IsAccessibleToUser,整合自訂權限引擎(如 ACL、資源型權限、多租戶隔離),突破靜態 roles 與 web.config 授權限制。
.sitemap 受 ASP.NET 保護防直接下載。SiteMapResolve 事件動態調整節點 URL/標題(如帶入使用者 ID)。roles 與 authorization 規則一致性。安全性修剪讓導航介面成為權限控制的自然延伸,使用者只看見能去的地方,資訊安全與使用體驗雙贏。