Pular para o conteúdo principal

Controle de acesso baseado em papel (Role-based access control)

Controle de acesso baseado em papel (RBAC) é um método de atribuição de permissões aos usuários com base em seus papéis. Considere usar RBAC nos seguintes cenários:

  • Você tem vários usuários com diferentes necessidades de acesso: O RBAC é ideal quando os usuários precisam de permissões variadas com base em papéis, como administrador, editor ou visualizador.
  • Você precisa simplificar o gerenciamento de permissões: É eficiente para gerenciar grandes grupos de usuários atribuindo papéis em vez de definir permissões individualmente.
  • Seu aplicativo atende diferentes departamentos ou equipes: É útil em cenários onde diferentes grupos exigem níveis distintos de acesso aos recursos.

Entenda como funciona o controle de acesso baseado em papel (Role-based access control)

Permissões (Escopos) (Permissions(Scopes))

Permissão refere-se à autorização para acessar um recurso de API (API resource). No mundo real, entidades como pedidos, produtos e documentos podem ser designadas como recursos, e várias ações podem ser atribuídas.

Exemplos de permissões, incluindo a capacidade de editar um pedido, ler um documento e excluir um produto, são os seguintes:

  • write:orders
  • read:documents
  • delete:products
Permissões

A figura acima mostra que a permissão read:item no recurso https://api-1.store.io é diferente da permissão read:item no recurso https://api-2.store.io.

Se nenhum recurso de API for fornecido, a permissão será tratada como "para OIDC". Normalmente, isso não é o que você deseja em RBAC.

Saiba como configurar permissões de API no Logto.

Papéis (Roles)

Papéis são um agrupamento de permissões que podem ser atribuídos aos usuários. Eles também fornecem uma maneira de agregar permissões definidas para diferentes APIs, tornando a adição, remoção ou ajuste de permissões mais eficiente do que atribuí-las individualmente aos usuários.

Aqui está um exemplo de um papel order_admin com várias permissões para dois recursos:

Papel de Administrador de Pedidos

Não há problema em haver sobreposição de permissões entre papéis.

Saiba como configurar papéis no Logto.

Exemplo: Uma livraria online

Vamos supor que você tenha uma livraria online para gerenciar. Aqui, simplificamos bastante o modelo de controle de acesso para fins de demonstração.

O modelo é dividido em dois principais recursos de API: pedidos e produtos. Eles possuem diferentes indicadores de recurso conforme abaixo:

  • Pedidos: https://api.store.io/orders
  • Produtos: https://api.store.io/products

Para cada recurso, você gostaria de separar as permissões em leitura, escrita e exclusão. Assim, você define seis permissões no total:

  • https://api.store.io/orders
    • Permissão read:order
    • Permissão write:order
    • Permissão delete:order
  • https://api.store.io/products
    • Permissão read:product
    • Permissão write:product
    • Permissão delete:product

Aqui está a ilustração desse modelo:

API da Livraria e Permissões

Você deseja ter dois tipos de administrador, administrador de pedidos e administrador de produtos:

  • Administrador de pedidos pode gerenciar pedidos e ver produtos (já que pedidos consistem em produtos), mas não pode gerenciar produtos.
  • Administrador de produtos pode gerenciar produtos, e não deve ter conhecimento de nenhum pedido.

Então você cria dois papéis, order_admin e product_admin, com as permissões:

  • order_admin
    • https://api.store.io/orders
      • read:order, write:order, delete:order
    • https://api.store.io/products
      • read:product
  • product_admin
    • https://api.store.io/products
      • read:product, write:product, delete:product

Aqui está a ilustração desses dois papéis:

Papéis da Livraria

Não há problema em atribuir tanto order_admin quanto product_admin a um usuário, assim ele terá todas as seis permissões que você acabou de definir.

Observe que o administrador de pedidos compartilha a permissão read:product com o administrador de produtos, e as permissões finais que um usuário possui são a união de todas as permissões dos papéis aos quais ele foi atribuído.

RBAC na prática: Um guia passo a passo para implementar autorização segura em seu aplicativo

Dominando o RBAC no Logto: Um exemplo abrangente do mundo real

CIAM 102: Autorização & Controle de acesso baseado em papel (RBAC)