ASP.NET MVC Como aplicar baseada em funções ou autenticação baseada em Ver prestação?
-
03-07-2019 - |
Pergunta
eu quero para exibir / ocultar certas partes de uma visão baseada em autenticação de status ou funções. Por minhas ações de controlador Eu tenho estendido ActionFilterAttribute para que eu possa atribuir certas ações.
<RequiresRole(Role:="Admin")> _
Function Action() as ActionResult
Return View()
End Function
Existe um semelhante modo (atribuir) que eu posso usar nas vistas? (Por isso não como este: Como posso criar uma exibição que tem diferentes telas de acordo com o papel que o usuário está em? )
Solução
Você pode acesso do usuário logado papéis do ponto de vista como este:
<% if (Page.User.IsInRole("Admin")) { %>
<td>
<%= Html.DeleteButton("delete", model.ID) %>
</td>
<% } %>
e talvez o seu método de extensão com algo como:
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;" });
}
Obviamente, eu estou usando JavaScript para executar um HTTP DELETE para minha ação do controlador, para evitar crawlers página a exclusão acidental de dados de obter minhas páginas. No meu caso eu estou estendendo JQuery com um método delete () para complementar o verbo HTTP.
Outras dicas
I novo este existia, mas demorou um pouco para encontrar. Aqui está o que eu estou usando:
<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>
Isso permite mostrar conteúdo diferente para diferentes usuários com base em seu estado de login ou credenciais.