RBAC na prática: Implementando autorização segura para sua aplicação
Guia completo de Controle de Acesso Baseado em Funções (RBAC): Domine o design de permissões, gestão de funções e autorização segura com implementação prática de CMS.
Guia completo de Controle de Acesso Baseado em Funções (RBAC): Domine o design de permissões, gestão de funções e autorização segura com implementação prática de CMS.
Você está com dificuldades para implementar um sistema de autorização seguro e escalável para sua aplicação? Controle de Acesso Baseado em Funções (RBAC) é o padrão da indústria para gerenciar permissões de usuário, mas implementá-lo corretamente pode ser desafiador. Este tutorial mostrará como construir um sistema RBAC robusto usando um exemplo de Sistema de Gerenciamento de Conteúdo (CMS) do mundo real.
Ao seguir este guia, você aprenderá:
O código-fonte completo deste tutorial está disponível no GitHub.
Controle de Acesso Baseado em Funções é mais do que apenas atribuir permissões a usuários. Trata-se de criar uma abordagem estruturada para autorização que equilibre segurança com manutenção.
Você pode aprender mais sobre O que é RBAC no Auth Wiki.
Aqui estão os princípios-chave que seguiremos em nossa implementação:
Permissões detalhadas proporcionam controle preciso sobre o que os usuários podem fazer no seu sistema. Em vez de níveis de acesso amplos como "admin" ou "usuário", definimos ações específicas que os usuários podem realizar em recursos. Por exemplo:
ler:artigos - Visualizar qualquer artigo no sistemacriar:artigos - Criar novos artigosatualizar:artigos - Modificar artigos existentespublicar:artigos - Alterar o status de publicação de artigosA propriedade de recursos é um conceito fundamental no design de autorização do nosso CMS. Enquanto o RBAC define quais ações diferentes funções podem realizar, a propriedade adiciona uma dimensão pessoal ao controle de acesso:
atualizar:artigos, um autor ainda pode editar seus próprios artigosEsta abordagem de dupla camada (funções + propriedade) cria um sistema mais intuitivo e seguro. Editores e administradores ainda podem gerenciar todo o conteúdo através de suas permissões de função, enquanto autores mantêm controle sobre seu próprio trabalho.
Vamos começar desenhando a funcionalidade central do nosso CMS através de seus endpoints de API:
Para cada endpoint, precisamos considerar dois aspectos do controle de acesso:
Aqui está como lidaremos com o acesso para cada endpoint:
| Endpoint | Lógica de controle de acesso |
|---|---|
| GET /api/articles | - Qualquer pessoa com permissão listar:artigos, OU autores podem ver seus próprios artigos |
| GET /api/articles/:id | - Qualquer pessoa com permissão ler:artigos, OU autor do artigo |
| POST /api/articles | - Qualquer pessoa com permissão criar:artigos |
| PATCH /api/articles/:id | - Qualquer pessoa com permissão atualizar:artigos, OU autor do artigo |
| DELETE /api/articles/:id | - Qualquer pessoa com permissão excluir:artigos, OU autor do artigo |
| PATCH /api/articles/:id/published | - Somente usuários com permissão publicar:artigos |
Com base nos requisitos de acesso da nossa API, podemos definir estas permissões:
| Permissão | Descrição |
|---|---|
| listar:artigos | Visualizar a lista de todos os artigos no sistema |
| ler:artigos | Ler o conteúdo completo de qualquer artigo |
| criar:artigos | Criar novos artigos |
| atualizar:artigos | Modificar qualquer artigo |
| excluir:artigos | Excluir qualquer artigo |
| publicar:artigos | Alterar o status de publicação |
Note que estas permissões são necessárias apenas ao acessar recursos que você não possui. Donos de artigos podem automaticamente:
ler:artigos)atualizar:artigos)excluir:artigos)Agora que temos nossas API e permissões definidas, podemos criar funções que agrupam estas permissões logicamente:
| Permissão/Função | 👑 Admin | 📝 Editor | ✍️ Autor |
|---|---|---|---|
| Descrição | Acesso completo ao sistema para gerenciamento completo de conteúdo | Pode ver todos os artigos e controlar o status de publicação | Pode criar novos artigos no sistema |
| listar:artigos | ✅ | ✅ | ❌ |
| ler:artigos | ✅ | ✅ | ❌ |
| criar:artigos | ✅ | ❌ | ✅ |
| atualizar:artigos | ✅ | ❌ | ❌ |
| excluir:artigos | ✅ | ❌ | ❌ |
| publicar:artigos | ✅ | ✅ | ❌ |
Nota: Autores automaticamente têm permissões de leitura/atualização/exclusão para seus próprios artigos, independentemente das permissões da função.
Cada função é projetada com responsabilidades específicas em mente:
Esta estrutura de funções cria uma clara separação de responsabilidades:
Antes de começar, você precisa criar uma conta no Logto Cloud, ou também pode usar uma instância Logto auto-hospedada usando a versão Logto OSS.
Mas para este tutorial, usaremos Logto Cloud pela simplicidade.

listar:artigosler:artigoscriar:artigosatualizar:artigospublicar:artigosexcluir:artigos
Vá para "Funções" no Console Logto para criar as seguintes funções para o CMS
ler:artigos, listar:artigos, publicar:artigoscriar:artigos


Vá para a seção "Gestão de Usuários" no Console Logto para criar usuários.
Na aba "Funções" dos detalhes do usuário, você pode atribuir funções ao usuário.
Em nosso exemplo, criamos 3 usuários com as seguintes funções:


Agora, que configuramos RBAC no Logto, podemos começar a integrá-lo em nosso frontend.
Primeiro, siga os Inícios Rápidos do Logto para integrar Logto em sua aplicação.
Em nosso exemplo, usamos React para demonstração.
Depois de configurar Logto em sua aplicação, precisamos adicionar as configurações de RBAC para o Logto funcionar.
Lembre-se de sair e entrar novamente para que esta alteração entre em vigor, caso você já esteja logado.
Quando o usuário fizer login com Logto e solicitar um token de acesso para os recursos da API especificados acima, Logto adicionará escopos (permissões) relacionados à função do usuário ao token de acesso.
Você pode usar getAccessTokenClaims do hook useLogto para obter os escopos do token de acesso.
E você pode usar os userScopes para verificar se o usuário tem permissão para acessar o recurso.
Agora, é hora de integrar Logto RBAC em seu backend.
Primeiro, precisamos adicionar um middleware no backend para verificar permissões de usuário, verificar se o usuário está logado e determinar se eles têm as permissões necessárias para acessar certas APIs.
Como você pode ver, neste middleware, verificamos se a solicitação do frontend contém um token de acesso válido e verificamos se o "audience" do token de acesso corresponde ao recurso da API que criamos no Console Logto.
A razão para verificar o recurso da API é que nosso recurso de API realmente representa os recursos do nosso backend CMS, e todas as nossas permissões do CMS estão associadas a este recurso de API.
Como este recurso de API representa os recursos do CMS no Logto, em nosso código frontend, incluímos o respectivo token de acesso ao fazer solicitações de API para o backend:
Agora podemos usar o middleware requireAuth para proteger nossos endpoints de API.
Para APIs que devem ser acessíveis apenas para usuários com permissões específicas, podemos adicionar restrições diretamente no middleware. Por exemplo, a API de criação de artigos deve ser acessível apenas para usuários com a permissão criar:artigos:
Para APIs que precisam verificar ambas as permissões e propriedade de recurso, podemos usar a função hasScopes. Por exemplo, na API de listagem de artigos, usuários com a permissão listar:artigos podem acessar todos os artigos, enquanto autores podem acessar seus próprios artigos criados:
Neste ponto, concluímos a implementação do RBAC. Você pode verificar o código-fonte completo para ver a implementação completa.
Agora, vamos testar nossa implementação RBAC do CMS usando os três usuários que acabamos de criar.
Primeiro, vamos logar como Alex e Charles respectivamente e criar alguns artigos.
Como Alex tem a função de Admin, ele pode criar, excluir, atualizar, publicar e ver todos os artigos.

Charles, tendo a função de Autor, pode apenas criar seus próprios artigos e pode apenas ver, atualizar e excluir artigos que ele próprio possui.

Bob, com a função de Editor, pode ver e publicar todos os artigos, mas não pode criar, atualizar ou excluir.

Parabéns! Você aprendeu a implementar um sistema RBAC robusto em sua aplicação.
Para cenários mais complexos, como construir aplicações multi-inquilinos, Logto fornece suporte abrangente a organizações. Confira nosso guia Construa uma aplicação SaaS multi-inquilino: Um guia completo desde o design até a implementação para aprender mais sobre a implementação de controle de acesso em toda a organização.
Feliz codificação! 🚀