Autorização baseada em modo de exibição no MVC ASP.NET Core

Um desenvolvedor geralmente deseja mostrar, ocultar ou modificar uma interface do usuário com base na identidade do usuário atual. Você pode acessar o serviço de autorização nos modos de exibição do MVC por meio da injeção de dependência. Para injetar o serviço de autorização em um modo de exibição Razor, use a diretiva @inject:

@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService

Se você quiser o serviço de autorização em todos os modos de exibição, coloque a diretiva @inject no arquivo _ViewImports.cshtml do diretório Modos de exibição . Para obter mais informações, consulte Injeção de dependência em exibições.

Use o serviço de autorização injetado para invocar AuthorizeAsync exatamente da mesma maneira que você verificaria durante a autorização baseada em recursos:

@if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded)
{
    <p>This paragraph is displayed because you fulfilled PolicyName.</p>
}

Em alguns casos, o recurso será seu modelo de exibição. Invoque AuthorizeAsync exatamente da mesma maneira que você verificaria durante a autorização baseada em recursos:

@if ((await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit)).Succeeded)
{
    <p><a class="btn btn-default" role="button"
        href="@Url.Action("Edit", "Document", new { id = Model.Id })">Edit</a></p>
}

No código anterior, o modelo é passado como um recurso que a avaliação da política deve levar em consideração.

Aviso

Não confie na visibilidade dos elementos da interface do usuário do aplicativo como a única autorização marcar. Ocultar um elemento de interface do usuário pode não impedir completamente o acesso à ação do controlador associado. Por exemplo, considere o botão no snippet de código anterior. Um usuário poderá invocar o método de ação Edit se souber que a URL do recurso relativo é /Document/Edit/1. Por esse motivo, o método de ação Edit deve executar sua própria verificação de autorização.