Ricerca…


introduzione

Laravel fornisce un modo semplice per autorizzare azioni dell'utente su risorse specifiche. Con Autorizzazione, è possibile consentire in modo selettivo agli utenti l'accesso a determinate risorse negando l'accesso ad altri. Laravel fornisce una semplice API per la gestione delle autorizzazioni degli utenti utilizzando Gates e Policies . Gates forniscono un approccio basato sulla chiusura semplice all'autorizzazione che utilizza AuthServiceProvider mentre le Policies consentono di organizzare la logica di autorizzazione intorno ai modelli utilizzando le classi.

Usando i cancelli

Gates sono chiusure che determinano se un utente è autorizzato a eseguire una determinata azione su una risorsa. Gates sono in genere definite nel metodo di avvio di AuthServiceProvider e succintamente nominate per riflettere su ciò che sta facendo. Un esempio di gate che consente solo agli utenti premium di visualizzare alcuni contenuti sarà simile a questo:

Gate::define('view-content', function ($user, $content){
    return $user->isSubscribedTo($content->id);
});

A Gate riceve sempre un'istanza utente come primo argomento, non è necessario passarlo quando si utilizza il gate e può facoltativamente ricevere argomenti aggiuntivi come il modello eloquente in questione.

Autorizzazione di azioni con porte

Per utilizzare l'esempio precedente su un modello blade per nascondere il contenuto dall'utente, in genere si dovrebbe fare qualcosa del genere:

@can('view-content', $content)
 <! -- content here -->
@endcan

Per impedire completamente la navigazione verso il contenuto, puoi fare quanto segue nel tuo controller:

if(Gate::allows('view-content', $content)){
    /* user can view the content */
}

        OR

if(Gate::denies('view-content', $content)){
    /* user cannot view content */
}

Nota: non è necessario passare a questo metodo l'utente attualmente autenticato, Laravel si occupa di ciò per te.

Politiche

Le politiche sono classi che consentono di organizzare la logica di autorizzazione attorno a una risorsa del modello. Utilizzando il nostro esempio precedente, potremmo avere una ContentPolicy che gestisce l'accesso degli utenti al modello di Content .

Per rendere ContentPolicy , laravel fornisce un comando artigiano. Semplicemente corri

php artisan make:policy ContentPolicy

Questo renderà una classe politica vuota e verrà inserita nella cartella app/Policies . Se la cartella non esiste, Laravel la creerà e inserirà la classe all'interno.

Una volta creati, è necessario registrare le politiche per aiutare Laravel a sapere quali politiche utilizzare per autorizzare le azioni sui modelli. L'AuthServiceProvider di AuthServiceProvider , fornito con tutte le nuove installazioni di Laravel, ha una proprietà policy che associa i modelli eloquenti alle loro politiche di autorizzazione. Tutto ciò che devi fare è aggiungere la mappatura all'array.

protected $policies = [
    Content::class => ContentPolicy::class,
 ];

Politiche di scrittura

Le Policies Scrittura seguono lo stesso schema della scrittura di Gates . Il gate di autorizzazione del contenuto può essere riscritto come un criterio come questo:

function view($user, $content)
{
    return $user->isSubscribedTo($content->id);
}

Le politiche possono contenere più metodi necessari per occuparsi di tutti i casi di autorizzazione per un modello.

Autorizzazione delle azioni con le politiche

Via il modello utente

Il modello utente Laravel contiene due metodi che aiutano con le autorizzazioni che utilizzano le Policies ; can e can't . Questi due possono essere usati per determinare se un utente ha o meno un'autorizzazione su un modello.

Per verificare se un utente può visualizzare o meno un contenuto, puoi fare quanto segue:

if($user->can('view', $content)){
    /* user can view content */
}

        OR

if($user->cant('view', $content)){
    /* user cannot view content */
}

Tramite middleware

Route::get('/contents/{id}, function(Content $content){
    /* user can view content */
})->middleware('can:view,content');

Via controllori

Laravel fornisce un metodo di supporto, chiamato authorize che accetta il nome della politica e il modello associato come argomenti, e autorizza l'azione in base alla propria logica di autorizzazione o nega l'azione e lancia una AuthorizationException che il gestore di eccezioni di Laravel converte in un 403 HTTP response .

pubic function show($id)
{
    $content = Content::find($id);

    $this->authorize('view', $content);
        
    /* user can view content */
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow