Planeamos refactorizar el sistema de nuestra compañía en un sistema basado en microservicios. Estos microservicios serán utilizados por nuestras propias aplicaciones internas de la compañía y por socios externos si es necesario. Uno para reservar, uno para productos, etc.
No estamos seguros de cómo manejar roles y ámbitos. La idea es crear 3 roles de usuario básicos, como administradores, agentes y usuarios finales, y permitir que las aplicaciones de los consumidores ajusten los ámbitos si es necesario.
- Los administradores pueden crear, actualizar, leer y eliminar todos los recursos de forma predeterminada (para su empresa).
- Los agentes pueden crear, actualizar y leer datos para su empresa.
- Los usuarios finales pueden crear, actualizar, eliminar y leer datos, pero no pueden acceder a los mismos puntos finales que los agentes o administradores. También podrán crear o modificar datos, pero no en el mismo nivel que los agentes o administradores. Por ejemplo, los usuarios finales pueden actualizar o leer la información de su cuenta, igual que el agente podrá hacerlo por ellos, pero no pueden ver ni actualizar las notas del administrador.
Digamos que los agentes por defecto pueden crear, leer y actualizar cada recurso para su empresa y ese es su alcance máximo que se puede solicitar para su token / sesión, pero los desarrolladores de la aplicación cliente (API consumidor) han decidido que uno de sus agentes puede leer y crear solo ciertos recursos.
¿Es una mejor práctica manejar esto en nuestra seguridad interna y dejar que escriban esos datos en nuestra base de datos, o dejar que los clientes lo manejen internamente solicitando un token con menor alcance y dejar que escriban qué agente tendrá qué alcance en su base de datos? ? De esta manera, tendríamos que rastrear solo los alcances de token.
La desventaja de esto es que nuestro equipo también necesitaría crear mecanismos de acceso ajustados en nuestras aplicaciones internas.
Con esta forma de pensar, los microservicios y su sistema de autorización no deben preocuparse por las necesidades de los clientes, ya que son solo consumidores y no parte del sistema (a pesar de que algunos de esos consumidores son nuestras propias aplicaciones internas).
¿Es esta delegación un buen enfoque?
payment:[read]
, el vendedor tienepayment: [create]
. ¿Agrega permisos en este caso?