Добавление элемента, если пользователь в роли - PullRequest
0 голосов
/ 04 мая 2011

Я делаю что-то подобное:

 <ul id="menu">
     @if (HttpContext.Current.User.IsInRole("admin")) {
         <li>@Html.ActionLink("Administration", "Index", "Administration")</li>
    }
 </ul>

Есть ли лучший способ?

Ответы [ 2 ]

2 голосов
/ 10 октября 2012

Даниэль прав, что нет способа сделать это короче с существующими помощниками и методами, но если вы создаете много ссылок на меню и все они очень похожи, вы можете написать небольшую вспомогательную функцию:

@helper MenuLink(string linkText, string action = "Index", string controller = null)
{
    <li>@Html.ActionLink(linkText, action, controller ?? linkText.Replace(" ", string.Empty))</li>
}

Теперь ваш код выглядит следующим образом:

<ul id="menu">
    @if (HttpContext.Current.User.IsInRole("admin")) {
        @MenuLink("Administration")
    }
</ul>

Эти значения по умолчанию помогают сократить время, но если вам нужно действие, отличное от Index, или имя вашего контроллера не совпадает с ссылкойтекст без пробелов, их легко переопределить:

@MenuLink("Admin reports", "Admin", "Reports")

Если пойти еще дальше, я использую несколько методов расширения, которые сделают это еще короче:

public static class HtmlStringConditionalExtensions
{
    public static IHtmlString If(this IHtmlString value, bool evaluation)
    {
        return evaluation ? value : MvcHtmlString.Empty;
    }

    public static IHtmlString ForRoles(this IHtmlString value, params string[] roles)
    {
        return value.If(roles.Any(HttpContext.Current.User.IsInRole));
    }
}

ИТеперь вы можете написать:

<ul id="menu">
    @MenuLink("Administration").ForRoles("admin")
</ul>
1 голос
/ 05 мая 2011

Это, конечно, самый короткий путь.Кажется, вы создаете глобальное меню со ссылками, видимыми только для определенных пользователей.Вы должны взглянуть на MvcContribs.UI.MenuBuilder пространство имен.

http://mvccontrib.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...