Condividi tramite


Autorizzazione basata sulla visualizzazione in ASP.NET Core MVC

Uno sviluppatore spesso vuole mostrare, nascondere o modificare un'interfaccia utente in base all'identità utente corrente. È possibile accedere al servizio di autorizzazione all'interno delle viste MVC tramite inserimento delle dipendenze. Per inserire il servizio di autorizzazione in una Razor visualizzazione, usare la @inject direttiva :

@using Microsoft.AspNetCore.Authorization
@inject IAuthorizationService AuthorizationService

Se si desidera che il servizio di autorizzazione in ogni visualizzazione, inserire la @inject direttiva nel _ViewImports.cshtml file della Views directory. Per altre informazioni, vedere Inserimento di dipendenze in visualizzazioni.

Usare il servizio di autorizzazione inserito per richiamare AuthorizeAsync nello stesso modo in cui si verificherebbe durante l'autorizzazione basata sulle risorse:

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

In alcuni casi, la risorsa sarà il modello di visualizzazione. Richiamare AuthorizeAsync esattamente come si verificherebbe durante l'autorizzazione basata sulle risorse:

@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>
}

Nel codice precedente, il modello viene passato come risorsa da considerare per la valutazione dei criteri.

Avviso

Non basarsi sull'attivazione/disattivazione della visibilità degli elementi dell'interfaccia utente dell'app come controllo di autorizzazione esclusivo. Nascondere un elemento dell'interfaccia utente potrebbe non impedire completamente l'accesso all'azione del controller associata. Si consideri ad esempio il pulsante nel frammento di codice precedente. Un utente può richiamare il Edit metodo di azione se conosce l'URL della risorsa relativa è /Document/Edit/1. Per questo motivo, il Edit metodo di azione deve eseguire il proprio controllo di autorizzazione.