2011-04-12 56 views
0

我有一個oracle數據庫,用於存儲本地Intranet的菜單和用戶數據。以用戶爲基礎的不同的asp:菜單

數據包括哪些用戶可以訪問哪些頁面。

最初我創建了一個擴展了StaticSiteMapProvider類的類,但是當它進入測試環境時,我發現這是緩存給整個站點(而不是以用戶爲基礎)。在各種論壇上聯機閱讀後,有人建議我應該從SiteMapProvider繼承,因爲這樣可以讓我在用戶的基礎上有一個SiteMapProvider和ASP:MENU項的分離實例,但是這仍然沒有解決問題。

目前我有一個用戶控件,它包含了asp:菜單,並使用我的自定義站點地圖提供程序作爲其數據源。

任何人都可以建議我如何顯示菜單在用戶基礎上,從數據庫授權驅動?

此外,整個菜單仍應出現在所有用戶,它只有在你點擊菜單節點後,他們會發現他們是否有權訪問該頁面/節點。

謝謝

+0

想要動態創建菜單 – Nighil 2011-04-12 08:53:15

+0

@NDC:是的,但基本上,但我沒有使用asp角色 – jpgooner 2011-04-12 09:00:33

回答

0

您可以使用SiteMap上的角色來定義將出現的菜單。

+0

感謝戴維斯,但編寫此代碼的開發人員決定不使用角色,他已根據菜單項實施了自己的頁面授權和站點地圖節點 – jpgooner 2011-04-12 09:01:38

+0

@jpgooner,重寫'IsAccessibleToUser'方法 - 請參閱我的答案。 – VinayC 2011-04-12 09:12:24

0

這裏有兩件事。如果您有靜態的節點集合,然後您想基於用戶可訪問性來顯示/隱藏它們,那麼您應該重寫IsAccessibleToUser 方法以確定給定節點是否適用於當前用戶(可從給定的HttpContext訪問)。

如果您的節點集合/層次結構以每個用戶爲基礎發生更改,則嘗試覆蓋BuildSiteMap以爲當前用戶加載不同的節點。不過,在這種情況下,如果StaticSiteMapProvider是正確的基類,我有點懷疑。可能您需要覆蓋SiteMapProvider

+0

自定義網站地圖提供程序類最初覆蓋staticSiteMapProvider,但我已經改變它覆蓋SiteMapProvider,仍然沒有喜悅?,我還想要所有節點出現.... – jpgooner 2011-04-12 09:11:56