Laravel - Autorizzazione

Nel capitolo precedente, abbiamo studiato il processo di autenticazione in Laravel. Questo capitolo spiega il processo di autorizzazione in Laravel.

Differenza tra autenticazione e autorizzazione

Prima di procedere ulteriormente nell'apprendimento del processo di autorizzazione in Laravel, comprendiamo la differenza tra autenticazione e autorizzazione.

In authentication, il sistema o l'applicazione Web identifica i propri utenti tramite le credenziali fornite. Se rileva che le credenziali sono valide, vengono autenticate, oppure non lo sono.

In authorization, il sistema o l'applicazione web controlla se gli utenti autenticati possono accedere alle risorse a cui stanno tentando di accedere o per cui fanno una richiesta. In altre parole, controlla i loro diritti e permessi sulle risorse richieste. Se rileva che possono accedere alle risorse, significa che sono autorizzati.

Quindi, authentication implica il controllo della validità delle credenziali dell'utente e authorization implica il controllo dei diritti e delle autorizzazioni sulle risorse di cui dispone un utente autenticato.

Meccanismo di autorizzazione a Laravel

Laravel fornisce un semplice meccanismo di autorizzazione che contiene due modi principali, vale a dire Gates e Policies.

Scrittura di cancelli e politiche

Le porte vengono utilizzate per determinare se un utente è autorizzato a eseguire un'azione specifica. Sono generalmente definiti inApp/Providers/AuthServiceProvider.phputilizzando la facciata del cancello. I gate sono anche funzioni dichiarate per eseguire il meccanismo di autorizzazione.

Le policy vengono dichiarate all'interno di un array e vengono utilizzate all'interno di classi e metodi che utilizzano meccanismi di autorizzazione.

Le seguenti righe di codice spiegano come utilizzare Gates e Policy per autorizzare un utente in un'applicazione web Laravel. Si noti che in questo esempio, il fileboot viene utilizzata per autorizzare gli utenti.

<?php

namespace App\Providers;

use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider{
   /**
      * The policy mappings for the application.
      *
      * @var array
   */
   
   protected $policies = [
      'App\Model' => 'App\Policies\ModelPolicy',
   ];
   
   /**
      * Register any application authentication / authorization services.
      *
      * @param \Illuminate\Contracts\Auth\Access\Gate $gate
      * @return void
   */
   
   public function boot(GateContract $gate) {
      $this->registerPolicies($gate);
      //
   }
}