Laravel Policies: Como Proteger Suas Rotas com Autorizações Elegantes e Seguras

Laravel Policies: Como Proteger Suas Rotas com Segurança

As Policies no Laravel são uma forma poderosa de centralizar e organizar a lógica de autorização da sua aplicação. Ao invés de misturar regras de acesso nos controllers ou nas views, você pode isolá-las em classes específicas, tornando o código mais limpo, seguro e reutilizável.

Neste artigo, você vai aprender como criar, registrar e aplicar Policies no Laravel, com um passo a passo direto ao ponto, ideal tanto para quem está começando quanto para quem quer melhorar a organização do seu código.


🔐 O que são Policies no Laravel?

As Policies funcionam como “gatekeepers” — elas determinam se um usuário pode executar uma determinada ação em um determinado recurso (geralmente um Model, como um Post, Produto, ou Usuário).

✅ Gate vs Policy

  • Gate: usado para ações genéricas, que não estão relacionadas diretamente a um Model.
  • Policy: usada quando você precisa autorizar ações sobre instâncias de um Model (ex: se o usuário pode editar um Post específico).

🛠️ Como criar uma Policy no Laravel

1. Gerar a Policy com o Artisan

php artisan make:policy PostPolicy --model=Post

Este comando cria uma Policy já ligada ao Model Post. O arquivo será gerado em app/Policies/PostPolicy.php.

2. Entendendo a estrutura gerada

Exemplo de método gerado:

public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

Esse método verifica se o usuário é o dono do post antes de permitir a edição.


🔗 Registrando a Policy

A Policy pode ser registrada automaticamente se seguir a convenção de nome (Post → PostPolicy). Mas para garantir, edite o arquivo AuthServiceProvider.php:

protected $policies = [
    App\Models\Post::class => App\Policies\PostPolicy::class,
];

Não esqueça de importar as classes corretamente no topo do arquivo.


🔎 Como usar a Policy na prática

1. Em Controllers

Use o método $this->authorize():

public function update(Request $request, Post $post)
{
    $this->authorize('update', $post);

    // código de atualização aqui
}

Se a autorização falhar, ele lança automaticamente uma exceção 403.

2. Nas Views Blade

@can('update', $post)
    <a href="{{ route('posts.edit', $post) }}">Editar</a>
@endcan

3. Em FormRequests

public function authorize()
{
    return $this->user()->can('update', $this->route('post'));
}

✅ Boas práticas com Policies

  • Crie Policies separadas por Model.
  • Mantenha apenas lógica de autorização nelas, nada de regras de negócio.
  • Use nomes de métodos como view, update, delete, create, seguindo a convenção do Laravel.
  • Sempre proteja ações críticas com authorize().

Agora que você viu como usar Policies no Laravel, que tal aplicar isso no seu projeto e organizar de vez sua lógica de autorização? Tem dúvidas ou sugestões? Comenta aqui embaixo ou compartilha com a galera do seu time!

Show 1 Comment

1 Comment

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *