2014-09-23 72 views
1

當MVCSiteMapProvider使用安全裝飾時,是否有一種方法可以在用戶通過身份驗證時隱藏節點,但在未通過身份驗證時顯示(與人們通常使用的方式相反)?使用MVCSiteMapProvider的安全裝飾

說我有一個菜單顯示註冊,登錄和支持。通過身份驗證後,我希望它隱藏「註冊和登錄」,替換爲「我的帳戶」,然後繼續顯示「支持」。因此,試圖堅持MVCSiteMapProvider的安全修剪功能,我想在驗證時隱藏節點。

非常感謝!

回答

0

最簡單的方法是使用自定義可見性提供程序在用戶通過身份驗證時隱藏節點。 MVC音樂商店演示有這個an example

/// <summary> 
/// Only displays nodes when a user is not authenticated. 
/// </summary> 
public class NonAuthenticatedVisibilityProvider 
    : SiteMapNodeVisibilityProviderBase 
{ 
    #region ISiteMapNodeVisibilityProvider Members 

    /// <summary> 
    /// Determines whether the node is visible. 
    /// </summary> 
    /// <param name="node">The node.</param> 
    /// <param name="sourceMetadata">The source metadata.</param> 
    /// <returns> 
    ///  <c>true</c> if the specified node is visible; otherwise, <c>false</c>. 
    /// </returns> 
    public override bool IsVisible(ISiteMapNode node, IDictionary<string, object> sourceMetadata) 
    { 
     return !HttpContext.Current.Request.IsAuthenticated; 
    } 

    #endregion 
} 

您可以通過指定要使用的節點的visibilityProvider屬性/屬性組裝式調用它。

<mvcSiteMapNode title="$resources:SiteMapLocalizations,LogOnTitle" action="LogOn" visibilityProvider="MvcMusicStore.Code.NonAuthenticatedVisibilityProvider, Mvc Music Store" />