ASP.NET MVC Как применить рендеринг представления на основе ролей или аутентификации?
-
03-07-2019 - |
Вопрос
я хочу показать / скрыть определенные части представления на основе статуса аутентификации или Ролей.Для моих действий с контроллером я расширил ActionFilterAttribute, чтобы я мог приписывать определенные действия.
<RequiresRole(Role:="Admin")> _
Function Action() as ActionResult
Return View()
End Function
Есть ли какой-нибудь Похожие способ (атрибуция), который я могу использовать в Представлениях?(так не похоже на это: Как я могу создать представление, которое имеет разные дисплеи в зависимости от роли, в которой находится пользователь?)
Решение
Вы можете получить доступ к ролям пользователя, вошедшего в систему, из представления следующим образом:
<% 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-УДАЛЕНИЯ моего действия контроллера, чтобы предотвратить случайное удаление данных поисковыми роботами с моих страниц.В моем случае я расширяю jQuery методом delete(), чтобы дополнить HTTP-глагол.
Другие советы
Я знал, что это существовало, но потребовалось некоторое время, чтобы найти.Вот что я использую:
<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>
Это позволяет показывать разный контент разным пользователям в зависимости от их состояния входа в систему или учетных данных.