2014-09-23 5 views
1

При использовании элементов безопасности с MVCSiteMapProvider существует ли способ скрыть узел, когда пользователь аутентифицирован, но показывать его, когда он не аутентифицирован (напротив того, как обычно его используют)?Безопасность Обрезка с MVCSiteMapProvider

Скажем, у меня есть меню, которое показывает регистрацию, вход и поддержку. При аутентификации я бы хотел, чтобы он скрывал регистрацию и вход, заменяя, скажем, «Моя учетная запись», а затем продолжал показывать «Поддержка». Поэтому, пытаясь придерживаться функций обрезки безопасности MVCSiteMapProvider, я хотел бы скрыть узел при аутентификации.

Большое спасибо!

ответ

0

Самый простой способ - использовать пользовательский поставщик видимости, чтобы скрыть узел, когда пользователь аутентифицирован. Демо-версия MVC Music Store содержит 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" /> 
Смежные вопросы