SEMTRAS · Santarém · Núcleo
Cada perfil reúne permissões, e um usuário pode acumular perfis. Marque os perfis de uma pessoa à esquerda e veja à direita as telas que ela passa a ter. Mais abaixo está a matriz completa e um teste de ações, que mostra por que a permissão sozinha não basta: quem pode aprovar um pedido também precisa não ser quem o pediu.
Marque quantos quiser. As permissões se somam.
Permissões concedidas direto ao usuário
Nenhum perfil traz estas. Quem decide é o Administrador, caso a caso.
Sobre esta combinação
Menu lateral
O menu só esconde o caminho. A rota também é protegida por permissão, e a ação passa pela Policy: quem digitar o endereço de uma tela sem acesso recebe “403”.
As colunas dos perfis marcados acima ficam em destaque. Clique no cabeçalho de um perfil para marcá-lo ou desmarcá-lo, ou na coluna “Direto” para conceder a permissão específica.
| Permissão | Direto | Tem? | |||||
|---|---|---|---|---|---|---|---|
|
sim — | ||||||
O pacote de permissões responde “esse perfil pode fazer esse tipo de coisa?”. A Policy responde “pode fazer nesta linha, agora?”. Para o usuário montado acima, escolha o que ele tenta fazer.
O sistema recusa com 403 e registra a tentativa. Primeiro motivo: .
Verificado em .
roles tem team_id igual ao tenant_id. Um município pode ajustar os seus sem afetar os outros.model_has_roles) também leva o tenant.// middleware, depois de descobrir o tenant pelo subdomínio
setPermissionsTeamId($tenant->id);
// ao criar o tenant
foreach (array_keys(PerfisPadrao::matriz()) as $nome) {
$perfil = Role::create(['name' => $nome]);
$perfil->syncPermissions(PerfisPadrao::matriz()[$nome]);
}
| Pergunta | Quem responde |
|---|---|
| Este usuário pode abrir a tela de aprovação? | Permissão no middleware da rota e no menu |
| Pode aprovar este pedido? | Policy do pedido: situação, autor, etapa |
| A saída passa da quantidade aprovada ou do saldo? | Classe de ação, na transação (e CHECK no banco) |
| Este pedido é de outro município? | Scope do tenant e Row-Level Security: nem chega a existir para o usuário |
| O módulo está ativo no município? | Middleware modulo:<nome>, antes da permissão |
public function autorizar(User $user, Pedido $pedido): bool
{
return $user->can('pedidos.autorizar')
&& $pedido->status === StatusPedido::EnviadoParaAprovacao
&& $pedido->solicitante_id !== $user->id
&& $this->etapaAtualDesigna($pedido, $user);
}
Perfis do PDF e o Administrador proposto · usuários e cenários fictícios · fonte: docs/requisitos/analise-requisitos.md, seções 2 e 7 (item 1). Configuração do fluxo de autorização em docs/fluxos/00-configurador-autorizacao.html.