ANÚNCIO

~/questoes/programacao

Como diferentes tokens podem ter diferentes níveis de permissão no Sanctum?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Programação Abilities Intermediario
Aula de referência API Laravel 12: Autenticação Completa com Sanctum e Abilities
Para fixar

Níveis de Permissão em Tokens com Sanctum

Conceito central

No Sanctum, cada token pode ser criado com um conjunto específico de abilities, que funcionam como permissões granulares. Isso permite que diferentes clientes de API tenham acesso apenas ao que realmente precisam, sem dar permissão total ao usuário.

Por que essa resposta faz sentido

As abilities são associadas diretamente ao token no momento da sua criação e armazenadas no banco de dados. Dessa forma, dois tokens do mesmo usuário podem ter permissões diferentes, permitindo segurança granular e controle fino sobre o que cada aplicação cliente pode fazer.

Armadilhas comuns

  • Confundir abilities do token com papéis (roles) do usuário — um usuário pode ter um papel, mas cada token dele pode ter abilities diferentes.
  • Pensar que o nível de permissão do token é determinado apenas pela autenticação — é necessário validar as abilities específicas em cada rota protegida.
  • Achar que todas as rotas devem saber sobre as abilities — o middleware do Sanctum verifica automaticamente se o token tem a ability necessária quando configurado.

Entenda as alternativas

A

Esta é a forma correta de funcionamento do Sanctum. Quando você cria um token, você define quais abilities ele terá (por exemplo: 'read:posts', 'create:posts'). O banco de dados armazena essas informações linkadas ao token, permitindo diferentes níveis de acesso mesmo para o mesmo usuário.

B

Configurar rotas públicas diferentes não controla as permissões dos tokens. As rotas são apenas endpoints; a autenticação e autorização acontecem através do token e suas abilities, não através da visibilidade da rota.

C

Atribuir papéis (roles) ao usuário no banco afeta o usuário como um todo, não o token específico. O Sanctum permite que um mesmo usuário tenha múltiplos tokens com abilities diferentes, independentemente do seu papel no sistema.

D

Variáveis de ambiente controlam configurações da aplicação, não as permissões de tokens individuais. Isso afetaria toda a API, não tokens específicos. Não tem relação com a granularidade de abilities do Sanctum.

Dica prática: Ao criar um token no seu controller de autenticação, use `$user->createToken('nome-do-token', ['read:posts', 'create:posts'])`. No middleware, proteja rotas com `auth:sanctum` e em policies use `$request->user()->tokenCan('ability-necessaria')` para validar permissões específicas.

Revise pensando: Se você precisa que um aplicativo mobile só possa ler dados sem poder deletar nada, como você configuraria o token no Sanctum?