Saltar al contenido principal

Control de acceso basado en roles (Role-based access control)

Control de acceso basado en roles (RBAC) es un método para asignar permisos a los usuarios en función de sus roles. Considera usar RBAC en los siguientes escenarios:

  • Tienes varios usuarios con diferentes necesidades de acceso: RBAC es ideal cuando los usuarios necesitan permisos variados según los roles, como administrador, editor o espectador.
  • Necesitas simplificar la gestión de permisos: Es eficiente para gestionar grandes grupos de usuarios asignando roles en lugar de establecer permisos individualmente.
  • Tu aplicación sirve a diferentes departamentos o equipos: Es útil en escenarios donde distintos grupos requieren niveles de acceso distintos a los recursos.

Entiende cómo funciona el control de acceso basado en roles

Permisos (Alcances)

Permiso (Permission) se refiere a la autorización para acceder a un recurso de API (API resource). En el mundo real, entidades como pedidos, productos y documentos pueden designarse como recursos, y se pueden asignar diversas acciones.

Ejemplos de permisos, incluyendo la capacidad de editar un pedido, leer un documento y eliminar un producto, son los siguientes:

  • write:orders
  • read:documents
  • delete:products
Permisos

La figura anterior muestra que el permiso read:item en el recurso https://api-1.store.io es diferente del permiso read:item en el recurso https://api-2.store.io.

Si no se proporciona un recurso de API, el permiso se tratará como "para OIDC". Normalmente esto no es lo que deseas en RBAC.

Aprende cómo configurar permisos de API en Logto.

Roles

Los roles (Roles) son un agrupamiento de permisos que se pueden asignar a los usuarios. También proporcionan una forma de agregar permisos definidos para diferentes APIs, haciendo que agregar, eliminar o ajustar permisos sea más eficiente que asignarlos individualmente a los usuarios.

Aquí tienes un ejemplo de un rol order_admin con varios permisos para dos recursos:

Rol de administrador de pedidos

Está bien que haya superposición de permisos entre roles.

Aprende cómo configurar roles en Logto.

Ejemplo: Una librería en línea

Supongamos que tienes una librería en línea para gestionar. Aquí, simplificamos mucho el modelo de control de acceso con fines demostrativos.

El modelo se divide en dos grandes recursos de API: pedidos y productos. Tienen diferentes indicadores de recurso como se muestra a continuación:

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

Para cada recurso, deseas separar los permisos en leer, escribir y eliminar. Así que defines seis permisos en total:

  • https://api.store.io/orders
    • Permiso read:order
    • Permiso write:order
    • Permiso delete:order
  • https://api.store.io/products
    • Permiso read:product
    • Permiso write:product
    • Permiso delete:product

Aquí tienes la ilustración de este modelo:

API de la librería y permisos

Quieres tener dos tipos de administradores, administrador de pedidos y administrador de productos:

  • Administrador de pedidos puede gestionar pedidos y ver productos (ya que los pedidos consisten en productos), pero no puede gestionar productos.
  • Administrador de productos puede gestionar productos, y no debe tener conocimiento de ningún pedido.

Así que creas dos roles, order_admin y product_admin, con los siguientes permisos:

  • 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

Aquí tienes la ilustración de estos dos roles:

Roles de la librería

Está bien asignar tanto order_admin como product_admin a un usuario, entonces tendrá los seis permisos que acabas de definir.

Nota que el administrador de pedidos comparte el permiso read:product con el administrador de productos, y los permisos finales que posee un usuario son la unión de todos los permisos de los roles que se le han asignado.

RBAC en la práctica: Una guía paso a paso para implementar autorización segura en tu aplicación

Dominando RBAC en Logto: Un ejemplo completo del mundo real

CIAM 102: Autorización & Control de acceso basado en roles (RBAC)