GitHub
LinkedIn
X
youtube
November 17, 2025 (5mo ago)
Autorização
Permissões
Segurança
RBAC
ABAC
Controle de Acesso

Autorização e Permissões em Aplicativos: Controle de Acesso Seguro

Autorização e Permissões em Aplicativos: Controle de Acesso Seguro

Autorização define o que um usuário autenticado pode fazer. Enquanto autenticação confirma identidade, autorização controla acesso a recursos e ações. Este guia apresenta modelos, implementações e boas práticas para construir sistemas de permissões robustos.

Autenticação vs Autorização

Autenticação

Responde: "Quem é você?". Verifica identidade através de credenciais.

Autorização

Responde: "O que você pode fazer?". Determina permissões após identidade confirmada.

Exemplo Prático

Usuário faz login (autenticação). Sistema verifica se pode acessar painel admin (autorização).

Por Que Autorização Importa

Sem controle de acesso adequado, qualquer usuário autenticado acessa qualquer recurso. Dados sensíveis ficam expostos, ações destrutivas ficam disponíveis. Autorização protege dados e operações críticas.

Modelos de Controle de Acesso

ACL (Access Control List)

Lista que define quem pode acessar cada recurso. Simples, mas não escala bem para sistemas complexos.

RBAC (Role-Based Access Control)

Permissões atribuídas a roles, roles atribuídas a usuários. Estrutura hierárquica. Modelo mais comum.

ABAC (Attribute-Based Access Control)

Decisões baseadas em atributos: do usuário, do recurso, do ambiente. Flexível, mas complexo.

ReBAC (Relationship-Based Access Control)

Baseado em relacionamentos entre entidades. "Pode editar se for dono". Usado por Zanzibar (Google).

RBAC em Detalhes

Componentes

  • Usuários: Pessoas ou sistemas que acessam.
  • Roles: Conjuntos de permissões (Admin, Editor, Viewer).
  • Permissões: Ações permitidas (create, read, update, delete).
  • Recursos: Objetos protegidos (posts, usuários, configurações).

Hierarquia de Roles

Roles podem herdar de outras. Admin herda de Editor, que herda de Viewer. Reduz duplicação.

Exemplo de Estrutura

Admin: [create, read, update, delete] em [todos recursos]
Editor: [create, read, update] em [conteúdo]
Viewer: [read] em [conteúdo público]

Implementação de RBAC

Banco de Dados

Tabelas para users, roles, permissions e relacionamentos (user_roles, role_permissions).

Middleware de Verificação

Antes de ação, middleware verifica se usuário tem permissão necessária.

Decorators/Guards

Em frameworks modernos, annotations que protegem rotas ou métodos.

Caching de Permissões

Evite consultar banco a cada requisição. Cache permissões do usuário em token ou Redis.

ABAC: Flexibilidade Avançada

Quando Usar

Quando RBAC não é expressivo o suficiente. Regras dependem de contexto dinâmico.

Exemplos de Políticas

  • Pode editar se for autor do documento.
  • Pode acessar se estiver no mesmo departamento.
  • Pode aprovar se valor for menor que seu limite.

XACML

Padrão para expressar políticas ABAC. XML-based, usado em ambientes enterprise.

Permissões em Nível de Recurso

Row-Level Security

Controle por registro. Usuário só vê seus próprios dados. PostgreSQL tem suporte nativo.

Column-Level Security

Controle por campo. Certos campos só visíveis para certos roles.

Multi-Tenancy

Isolamento entre tenants. Cada organização só acessa seus dados.

Permissões do Sistema Operacional

iOS

Acesso a câmera, localização, fotos exige permissão explícita do usuário. Info.plist define descrições.

Android

Permissões declaradas no Manifest. Dangerous permissions exigem consentimento runtime.

Boas Práticas

  • Peça no momento de uso, não upfront.
  • Explique por que precisa.
  • Funcione graciosamente se negada.

Tokens e Claims

JWT Claims

Token pode conter claims de permissão. Servidor valida sem consultar banco.

Scopes em OAuth

Definem que recursos o token pode acessar. read:users, write:posts.

Cuidados

Tokens grandes impactam performance. Balance claims inline vs consulta.

Autorização em APIs

Verificação por Endpoint

Cada endpoint verifica permissão específica antes de executar.

Resource Servers

Servidor de API valida tokens e autoriza com base em scopes e claims.

Policy Decision Point (PDP)

Serviço centralizado que decide autorizações. Open Policy Agent (OPA) é exemplo.

Padrões de Implementação

Deny by Default

Negue acesso a menos que explicitamente permitido. Falha segura.

Least Privilege

Conceda mínimo necessário. Usuário só pode o que precisa.

Separation of Duties

Tarefas críticas exigem múltiplas pessoas. Ninguém faz tudo sozinho.

Auditoria e Logging

Registre Decisões

Log de quem tentou acessar o quê e se foi permitido ou negado.

Detecção de Anomalias

Padrões suspeitos: muitas negações, acessos fora do horário, escalação de privilégio.

Compliance

Regulações exigem trilha de auditoria. GDPR, SOX, HIPAA.

Erros Comuns

Verificação Apenas no Frontend

Backend deve sempre verificar. Frontend é manipulável.

Roles Hardcoded

Dificulta evolução. Use configuração flexível.

Permissões Excessivas

Por conveniência, dar mais acesso que necessário. Princípio do menor privilégio.

Falta de Teste

Permissões mal testadas criam brechas. Teste cenários de acesso.

Ferramentas e Bibliotecas

Casbin

Biblioteca de autorização com suporte a múltiplos modelos (RBAC, ABAC, ACL).

Open Policy Agent (OPA)

Motor de políticas. Decisões de autorização como código.

Auth0 FGA

Fine-Grained Authorization. Modelo similar ao Zanzibar do Google.

Ory Keto

Implementação open source inspirada em Zanzibar.

Multi-Tenancy e Autorização

Isolamento

Tenants não acessam dados uns dos outros. Verificação em todas as queries.

Roles por Tenant

Usuário pode ter roles diferentes em organizações diferentes.

Super Admin

Acesso cross-tenant para operações de plataforma. Use com extremo cuidado.

Conclusão

Autorização bem implementada protege dados e garante que usuários façam apenas o que devem. Escolha modelo adequado (RBAC para maioria), implemente com deny by default, teste exaustivamente e audite acesso. Segurança é processo contínuo, não configuração única.

FAQs

1) RBAC é suficiente para a maioria dos casos? Sim. RBAC atende bem a maioria dos aplicativos. ABAC é para cenários mais complexos.

2) Onde armazenar permissões? Banco de dados para fonte da verdade. Cache (JWT claims, Redis) para performance.

3) Como lidar com permissão negada? Retorne 403 Forbidden com mensagem genérica. Não revele detalhes da política.

4) Preciso de serviço de autorização separado? Para sistemas grandes, pode valer. Para apps menores, biblioteca integrada basta.

5) Como testar autorização? Testes automatizados que verificam acesso permitido e negado por role/permissão.