Аналог управления LoginView в ASP.NET MVC - PullRequest
1 голос
/ 15 июня 2011

Как вы делаете условный рендеринг контента в ASP.NET MVC в зависимости от User.IsInRole()? Перепробовал все совпадения, которые я мог найти здесь, в SO, но все еще не удовлетворен. Мне нужно скрыть ссылки действий в зависимости от ролей пользователей, поэтому сначала я подумал о помощнике типа

public static MvcHtmlString ActionLink(this HtmlHelper html, string linkUrl, string linkText, object htmlAttributes, bool alwaysVisible, params string[] roles)

но потом я понял, что мне часто нужно было скрывать и внешний контент (например, <li></li> в меню, в которое помещались мои ссылки). Я следую рекомендации из лучших практик и имею UrlHelperExtension, поэтому мои типичные ссылки выглядят так:

<a href="@Url.SomeStuff()">some stuff</a>

и я не могу попытаться реализовать хелпер поверх RouteLink(), который будет извлекать AuthorizeAttribute из соответствующих методов контроллера, могу я? Каково ваше решение?

Ответы [ 2 ]

4 голосов
/ 15 июня 2011

Я склонен использовать что-то вроде:

@if (User.IsInRole("Role")) {
<li>
  <a href="@Url.SomeStuff()">Some stuff</a>
<li>
}

Таким образом, при необходимости я могу иметь несколько ссылок на роль.

0 голосов
/ 16 июня 2011

Другим способом, которым вы могли бы подойти к этому, является использование CSS для скрытия элементов, которые вы хотите скрыть, на основе ролей, например

<li class=@(User.IsInRole('role')?"showClass":"hideClass")>
  <a href="@Url.SomeStuff()">Some stuff</a>
<li>

или, возможно, что-то с Jquery, например:

    <li class="@User.Role")>
      <a href="@Url.SomeStuff()">Some stuff</a>
    <li>

    $(document).ready(function () {
       $(".SomeRole").hide()
    }
...