因爲項目需要,不用asp.net本身自帶的role,在Web.sitemap中定義:
需在用戶爲admin或是contrib身份時顯示。我們可以建立一個方法:
SecurityUtil.CurrentUserCanAccess(SiteMapNode)
其中關鍵是獲得SiteMapNode的自定義屬性:
具體CurrentUserCanAccess方法在此不詳細介紹。有了上面的方法很容易根據項目具體情況處理。
然後在NavigationMenu中添加:
讀者可能要問爲什麼不直接在SiteMapNode上處理。我其實試過這個更方便的辦法。但SiteMap中不能刪除任何node。大概因爲是SiteMap對應於物理文件,我們顯然是不會想辦法去刪掉文件中任何東西。還有一個需要注意的是若最後一個方法寫入Page_PreRender中MenuItemCollection可是0,還沒有render。上面的辦法不僅代碼少,而且清晰直觀。