Обрезки безопасности с MVCsiteMapProvider

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

Скажем, у меня есть меню, в котором показаны «Регистрация», «Вход в систему» ​​и «Поддержка». При аутентификации я бы хотел, чтобы он скрыл регистрацию и вход, заменив, скажем, «Моя учетная запись», а затем продолжал показывать поддержку. Итак, пытаясь придерживаться функций Security Trimming MVCsiteMapProvider, я хотел бы скрыть узел при аутентификации.

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


person Tim Harker    schedule 23.09.2014    source источник


Ответы (1)


Самый простой способ — использовать настраиваемый поставщик видимости, чтобы скрыть узел, когда пользователь аутентифицируется. В демо-версии MVC Music Store есть пример этого.

/// <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
}

Вы можете вызвать его, указав тип сборки в свойстве/атрибуте visibleProvider узлов, которые вы хотите использовать.

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