Условное представление на главной странице в asp.net mvc - PullRequest
3 голосов
/ 17 ноября 2009

Привет У меня есть следующие меню, определенные на моей главной странице в веб-приложении asp.net mvc

<%Html.RenderPartial("AdminMenu"); %>
<%Html.RenderPartial("ApproverMenu"); %>
<%Html.RenderPartial("EditorMenu"); %>

Однако я хочу отображать только правильное меню в зависимости от роли пользователя, вошедшего в систему. Как мне этого добиться?

Я начинаю думать, что моя стратегия неверна, поэтому есть ли лучший метод для достижения того же самого?

Ответы [ 2 ]

8 голосов
/ 17 ноября 2009

В качестве простого примера вы можете сделать это:

<% 
    if (User.IsInRole("AdminRole")
        Html.RenderPartial("AdminMenu"); 
    else if (User.IsInRole("Approver")
        Html.RenderPartial("ApproverMenu"); 
    else if (User.IsInRole("Editor")
        Html.RenderPartial("EditorMenu"); 
%>

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

<% 
    if (User.IsInRole("AdminRole")
        Html.RenderPartial("AdminMenu"); 
    if (User.IsInRole("Approver")
        Html.RenderPartial("ApproverMenu"); 
    if (User.IsInRole("Editor")
        Html.RenderPartial("EditorMenu"); 
%>

Или более элегантный подход для последнего с использованием метода расширения:

<% 
    Html.RenderPartialIfInRole("AdminMenu", "AdminRole"); 
    Html.RenderPartialIfInRole("ApproverMenu", "Approver"); 
    Html.RenderPartialIfInRole("EditorMenu", "Editor"); 
%>

с

public static void RenderPartialIfInRole
    (this HtmlHelper html, string control, string role)
{
    if (HttpContext.Current.User.IsInRole(role)
        html.RenderPartial(control);
}
2 голосов
/ 17 ноября 2009

Методы расширений - это путь сюда. В более широком смысле, чем у @ Joseph's RenderPartialIfInRole, вы можете использовать ConditionalRenderPartial метод:

<% 
    Html.ConditionalRenderPartial("AdminMenu", HttpContext.Current.User.IsInRole("AdminRole")); 
    Html.ConditionalRenderPartial("ApproverMenu", HttpContext.Current.User.IsInRole("ApproverRole")); 
    Html.ConditionalRenderPartial("EditorMenu", HttpContext.Current.User.IsInRole("EditorRole")); 
%>

...

public static void ConditionalRenderPartial
    (this HtmlHelper html, string control, bool cond)
{
    if (cond)
        html.RenderPartial(control);
}
...