Laravel - Autorização

No capítulo anterior, estudamos sobre o processo de autenticação no Laravel. Este capítulo explica o processo de autorização no Laravel.

Diferença entre autenticação e autorização

Antes de prosseguirmos no aprendizado sobre o processo de autorização no Laravel, vamos entender a diferença entre autenticação e autorização.

Dentro authentication, o sistema ou o aplicativo da web identifica seus usuários por meio das credenciais que eles fornecem. Se descobrir que as credenciais são válidas, elas são autenticadas ou não.

Dentro authorization, o sistema ou o aplicativo da web verifica se os usuários autenticados podem acessar os recursos que estão tentando acessar ou para fazer uma solicitação. Em outras palavras, ele verifica seus direitos e permissões sobre os recursos solicitados. Se ele descobrir que eles podem acessar os recursos, significa que eles estão autorizados.

Portanto, authentication envolve a verificação da validade das credenciais do usuário e authorization envolve a verificação dos direitos e permissões sobre os recursos que um usuário autenticado possui.

Mecanismo de Autorização no Laravel

O Laravel fornece um mecanismo simples de autorização que contém duas formas principais, a saber Gates e Policies.

Escrevendo portas e políticas

Gates são usados ​​para determinar se um usuário está autorizado a executar uma ação especificada. Eles são normalmente definidos emApp/Providers/AuthServiceProvider.phpusando a fachada do portão. As portas também são funções declaradas para executar o mecanismo de autorização.

As políticas são declaradas em uma matriz e são usadas em classes e métodos que usam mecanismo de autorização.

As linhas de código a seguir explicam como usar as portas e políticas para autorizar um usuário em uma aplicação web Laravel. Observe que, neste exemplo, oboot função é usada para autorizar os usuários.

<?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);
      //
   }
}