RBAC na prática: Implementação de autorização segura para a sua aplicação
Guia completo para o Controle de Acesso Baseado em Funções (RBAC): Domine o design de permissões, gestão de funções e autorização segura com uma implementação prática de CMS.
Guia completo para o Controle de Acesso Baseado em Funções (RBAC): Domine o design de permissões, gestão de funções e autorização segura com uma implementação prática de CMS.
Está a ter dificuldades em implementar um sistema de autorização seguro e escalável para a sua aplicação? O Controle de Acesso Baseado em Funções (RBAC) é o padrão da indústria para gerir permissões de utilizadores, mas implementá-lo corretamente pode ser desafiador. Este tutorial irá mostrar-lhe como construir um sistema robusto de RBAC usando um exemplo real de Sistema de Gestão de Conteúdos (CMS).
Ao seguir este guia, você aprenderá:
O código fonte completo deste tutorial está disponível no GitHub.
O Controle de Acesso Baseado em Funções é mais do que apenas atribuir permissões aos utilizadores. Trata-se de criar uma abordagem estruturada para autorização que equilibre segurança com sustentabilidade.
Pode aprender mais sobre O que é o RBAC no Auth Wiki.
Aqui estão os princípios chave que vamos seguir na nossa implementação:
Permissões granulares dão-lhe controlo preciso sobre o que os utilizadores podem fazer no seu sistema. Em vez de níveis de acesso amplos, como "admin" ou "utilizador", definimos ações específicas que os utilizadores podem realizar em recursos. Por exemplo:
read:articles - Ver qualquer artigo no sistemacreate:articles - Criar novos artigosupdate:articles - Modificar artigos existentespublish:articles - Alterar o estado de publicação dos artigosA posse de recursos é um conceito fundamental no design de autorização do nosso CMS. Enquanto o RBAC define quais ações diferentes funções podem executar, a posse adiciona uma dimensão pessoal ao controlo de acesso:
update:articles, um autor ainda pode editar os seus próprios artigosEsta abordagem de duas camadas (funções + posse) cria um sistema mais intuitivo e seguro. Editores e administradores ainda podem gerir todo o conteúdo através das suas permissões de funções, enquanto os autores mantêm o controlo sobre o seu próprio trabalho.
Comecemos por desenhar a funcionalidade principal do nosso CMS através dos seus pontos de extremidade API:
Para cada ponto de extremidade, precisamos considerar dois aspetos do controlo de acesso:
Aqui está como vamos lidar com o acesso para cada ponto de extremidade:
| Endpoint | Lógica de controlo de acesso |
|---|---|
| GET /api/articles | - Qualquer um com permissão list:articles, OU autores podem ver seus próprios artigos |
| GET /api/articles/:id | - Qualquer um com permissão read:articles, OU autor do artigo |
| POST /api/articles | - Qualquer um com permissão create:articles |
| PATCH /api/articles/:id | - Qualquer um com permissão update:articles, OU autor do artigo |
| DELETE /api/articles/:id | - Qualquer um com permissão delete:articles, OU autor do artigo |
| PATCH /api/articles/:id/published | - Apenas utilizadores com permissão publish:articles |
Com base nos nossos requisitos de acesso à API, podemos definir estas permissões:
| Permissão | Descrição |
|---|---|
| list:articles | Ver a lista de todos os artigos no sistema |
| read:articles | Ler o conteúdo completo de qualquer artigo |
| create:articles | Criar novos artigos |
| update:articles | Modificar qualquer artigo |
| delete:articles | Apagar qualquer artigo |
| publish:articles | Alterar o estado de publicação |
Note que estas permissões só são necessárias ao aceder recursos que não possui. Donos de artigos podem automaticamente:
read:articles)update:articles)delete:articles)Agora que temos nossa 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 total ao sistema para gestão completa de conteúdo | Pode visualizar todos os artigos e controlar o estado de publicação | Pode criar novos artigos no sistema |
| list:articles | ✅ | ✅ | ❌ |
| read:articles | ✅ | ✅ | ❌ |
| create:articles | ✅ | ❌ | ✅ |
| update:articles | ✅ | ❌ | ❌ |
| delete:articles | ✅ | ❌ | ❌ |
| publish:articles | ✅ | ✅ | ❌ |
Nota: Autores têm automaticamente permissões de leitura/atualização/eliminação para os seus próprios artigos, independentemente das permissões de função.
Cada função é desenhada com responsabilidades específicas em mente:
Esta estrutura de funções cria uma clara separação de preocupações:
Antes de começar, precisa criar uma conta no Logto Cloud, ou pode também usar uma instância do Logto auto-hospedada usando a versão OSS do Logto.
Mas para este tutorial, utilizaremos o Logto Cloud para simplicidade.

list:articlesread:articlescreate:articlesupdate:articlespublish:articlesdelete:articles
Vá para Funções no Console do Logto para criar as seguintes funções para o CMS
read:articles, list:articles, publish:articlescreate:articles


Vá para a seção "Gestão de utilizadores" no Console do Logto para criar utilizadores.
Na aba "Funções" dos detalhes do utilizador, pode atribuir funções ao utilizador.
No nosso exemplo, criamos 3 utilizadores com as seguintes funções:


Agora que configurámos o RBAC no Logto, podemos começar a integrá-lo no nosso frontend.
Primeiro, siga os Inícios Rápidos do Logto para integrar o Logto na sua aplicação.
No nosso exemplo, usamos React para demonstração.
Depois de configurar o Logto na sua aplicação, precisamos adicionar as configurações do RBAC para o Logto funcionar.
Lembre-se de sair e entrar novamente para fazer esta alteração ter efeito se já estiver conectado.
Quando o utilizador se inscrever com o Logto e solicitar um token de acesso para os recursos da API especificados acima, o Logto adicionará escopos (permissões) relacionados à função do utilizador ao token de acesso.
Pode usar getAccessTokenClaims do hook useLogto para obter os escopos do token de acesso.
E pode usar o userScopes para verificar se o utilizador tem permissão para aceder ao recurso.
Agora, é hora de integrar o Logto RBAC no seu backend.
Primeiro, precisamos adicionar um middleware no backend para verificar as permissões do utilizador, verificar se o utilizador está logado e determinar se eles têm as permissões necessárias para aceder a certas APIs.
Como pode ver, neste middleware, verificamos se o pedido do frontend contém um token de acesso válido e verificamos se o público do token de acesso corresponde ao recurso da API que criámos no Console do Logto.
O motivo para verificar o recurso da API é que o nosso recurso da API representa, na verdade, os recursos do nosso backend CMS, e todas as nossas permissões do CMS estão associadas a este recurso da API.
Como este recurso da API representa os recursos do CMS no Logto, no nosso código frontend, incluímos o token de acesso correspondente ao fazer pedidos de API ao backend:
Agora podemos usar o middleware requireAuth para proteger nossos pontos de extremidade da API.
Para APIs que devem ser acessíveis apenas a utilizadores 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 a utilizadores com a permissão create:articles:
Para APIs que precisam verificar tanto permissões quanto posse de recursos, podemos usar a função hasScopes. Por exemplo, na API de listagem de artigos, utilizadores com a permissão list:articles podem acessar todos os artigos, enquanto autores podem acessar seus próprios artigos criados:
Neste ponto, completámos a implementação do RBAC. Pode verificar o código fonte completo para ver a implementação completa.
Agora, testemos a implementação do CMS RBAC usando os três utilizadores que acabámos de criar.
Primeiro, vamos entrar com Alex e Charles, respetivamente, e criar alguns artigos.
Uma vez que Alex tem a função Admin, ele pode criar, apagar, atualizar, publicar e ver todos os artigos.

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

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

Parabéns! Você aprendeu como implementar um sistema robusto de RBAC na sua aplicação.
Para cenários mais complexos, como construir aplicações multi-tenant, o Logto fornece suporte organizacional compreensivo. Consulte o nosso guia Construindo uma aplicação SaaS multi-tenant: Um guia completo desde o design à implementação para aprender mais sobre a implementação de controlo de acesso a nível organizacional.
Feliz codificação! 🚀