ASP.NET MVC Как применить визуализацию представлений на основе ролей или аутентификации?

я хочу показать/скрыть определенные части представления на основе статуса аутентификации или ролей. Для действий моего контроллера я расширил ActionFilterAttribute, чтобы я мог атрибутировать определенные действия.

<RequiresRole(Role:="Admin")> _
Function Action() as ActionResult
    Return View()
End Function

Есть ли похожий способ (атрибуция), который я могу использовать в представлениях? (так что не так: Как мне создать представление, отображаемое по-разному в зависимости от роли, в которой находится пользователь?)


person Ropstah    schedule 29.04.2009    source источник
comment
Почему для этого нужно было создать ActionFilterATtribute? Атрибут Authorize принимает параметр Roles.   -  person Çağdaş Tekin    schedule 29.04.2009
comment
Ах да :-) Я создал свой, чтобы учиться   -  person Ropstah    schedule 29.04.2009


Ответы (2)


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

<% if (Page.User.IsInRole("Admin")) { %>
        <td>
          <%= Html.DeleteButton("delete", model.ID) %>
        </td>
<% } %>

и, возможно, ваш метод расширения с чем-то вроде:

public static string DeleteButton(this HtmlHelper html, 
    string linkText, int id)
{
    return html.RouteLink(linkText,
     new { ID = id, action = "Delete" },
     new { onclick = "$.delete(this.href, deleteCompleted()); return false;" });
}

Очевидно, я использую JavaScript для выполнения действия HTTP DELETE для моего контроллера, чтобы сканеры страниц не могли случайно удалить данные и получить мои страницы. В моем случае я расширяю JQuery с помощью метода delete(), чтобы дополнить HTTP-глагол.

person Kris    schedule 29.04.2009
comment
Итак, использование рендеринга представления на основе атрибутов, вероятно, невозможно. Я должен использовать операторы If... Спасибо. - person Ropstah; 04.05.2009

Я новый, это существовало, но потребовалось время, чтобы найти. Вот что я использую:

<asp:LoginView runat="server">
    <AnonymousTemplate>
        You are not logged in yet. Please log in.
    </AnonymousTemplate>
    <RoleGroups>
        <asp:RoleGroup Roles="Admin">
            <ContentTemplate>
                You are an Admin.
            </ContentTemplate>
        </asp:RoleGroup>
        <asp:RoleGroup Roles="Customers">
            <ContentTemplate>
                You are a customer.
            </ContentTemplate>
        </asp:RoleGroup>
    </RoleGroups>
    <LoggedInTemplate>
        Simple Log in check
    </LoggedInTemplate>
</asp:LoginView>

Это позволяет показывать разный контент разным пользователям в зависимости от их состояния входа в систему или учетных данных.

person Bo Flexson    schedule 25.08.2011
comment
Это вебформы. Я считаю, что исходный пост был о MVC. - person Ethan Schofer; 14.11.2014