Saltearse al contenido

Gestión de Roles

El Control de Acceso Basado en Roles (RBAC) es un modelo de seguridad ampliamente adoptado que se utiliza para restringir el acceso al sistema a usuarios autorizados en función de los roles que se les han asignado. En lugar de otorgar permisos directamente a usuarios individuales, RBAC asigna permisos a roles, y los usuarios se asocian con uno o más roles. Este enfoque simplifica la gestión, mejora la seguridad y respalda el principio de privilegio mínimo.

image

En el contexto de la API de Datascend y sus integraciones, el control de acceso basado en roles se estructura en torno a cinco componentes principales:

Un Rol define un conjunto de permisos que reflejan una función o responsabilidad laboral específica dentro del sistema. Los roles no están vinculados a usuarios específicos, sino a las acciones que los usuarios pueden realizar.

Los roles tienen nombre, para que el usuario pueda identificarlos fácilmente. Algunos ejemplos que el usuario podría crear o encontrar incluyen:

RolDescripciónViene por defecto
AdministradorPermisos completos
AnónimoPermisos muy limitados
GerentePuede cambiar la configuración dentro de la configuración de la entidadNo
EditorPuede crear y modificar contenido dentro de las entidades a las que tiene accesoNo
ObservadorSolo puede ver contenido dentro de las entidades a las que tiene accesoNo

El rol Anónimo está diseñado para usuarios que no han iniciado sesión en el sistema. Este rol tiene permisos muy limitados, centrados principalmente en ver contenido público sin la capacidad de modificar o gestionar ningún recurso. Los permisos específicos asociados con el rol Anónimo pueden incluir:

  • Acceso de lectura a entidades e informes disponibles públicamente.
  • Sin capacidad para crear, actualizar o eliminar ningún objeto.
  • Sin acceso a datos sensibles o restringidos.

Este rol es útil para escenarios en los que se desea proporcionar información básica a los usuarios sin requerir autenticación. Por ejemplo, un panel o informe público que cualquiera puede ver sin iniciar sesión, o informarlo a otra persona.

Las acciones definen qué operaciones se pueden realizar sobre los objetos.

AcciónDescripción
GestionarPermite la gestión de objetos existentes.
CrearPermite la creación de nuevos objetos.
ObtenerPermite la visualización de objetos existentes.
ActualizarPermite la modificación de objetos existentes.
EliminarPermite la eliminación de objetos existentes.

Los objetos representan los recursos o entidades dentro del sistema con los que los usuarios pueden interactuar, tales como:

  • Menús de Categoría
  • Relaciones
  • Fuentes de datos
  • Estructura
  • Entidades
  • Dominios
  • Informes

Los permisos son el resultado de combinar acciones con objetos. Por ejemplo, el permiso para crear un registro de entidad se forma combinando la acción “crear” con el objeto llamado entidad dentro del sistema.

Nota: Los permisos se asignan a roles, no directamente a los usuarios.

A continuación se muestran los endpoints disponibles para gestionar roles:

Recuperar todos los roles almacenados.

Endpoint:

GET /api/v1/roles/

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [...],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Crear un nuevo rol.

Endpoint:

POST /api/v1/roles/

Petición:

{
"item": "Role",
"description": "New role",
"dashboardCustomQuery": "1"
}

Respuesta:

{
"status": 201,
"error": false,
"message": "string",
"data": [
{}
],
"entityName": "string"
}

Actualizar un rol existente.

Endpoint:

PUT /api/v1/roles/:roleId

Petición:

{
"item": "Role",
"description": "Updated role",
"dashboardCustomQuery": "1"
}

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [...],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Recuperar un rol específico por su ID.

Endpoint:

GET /api/v1/roles/:roleId

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [...],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Eliminar un rol específico por su ID.

Endpoint:

DELETE /api/v1/roles/:roleId

Respuesta:

204 No Content

Endpoint para gestionar las propiedades de los roles

Sección titulada «Endpoint para gestionar las propiedades de los roles»

A continuación se muestran los endpoints disponibles para gestionar la funcionalidad de los roles:

Recuperar todos los objetos almacenados.

Endpoint:

GET /api/v1/roles/objects

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": 1,
"item": "cattle",
"type": "Table"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Recuperar todas las acciones almacenadas.

Endpoint:

GET /api/v1/roles/actions

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "1",
"item": "Get"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Obtener todos los permisos disponibles almacenados en un objeto

Sección titulada «Obtener todos los permisos disponibles almacenados en un objeto»

Recuperar todos los permisos disponibles almacenados en un objeto específico.

Endpoint:

GET /api/v1/roles/permissions/:objectType/:objectItem

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "1",
"actionId": "1",
"objectId": "1",
"active": true,
"description": "admin"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Obtener permisos almacenados en un rol por objeto dado

Sección titulada «Obtener permisos almacenados en un rol por objeto dado»

Recuperar permisos almacenados en un rol para un objeto dado.

Endpoint:

GET /api/v1/roles/:roleId/permissions/:objectType/:objectItem

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"roleId": "1",
"objectItem": "cattle",
"objectType": "Table",
"permissions": "1"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Sobrescribir permisos almacenados en un rol por objeto dado

Sección titulada «Sobrescribir permisos almacenados en un rol por objeto dado»

Sobrescribir permisos almacenados en un rol para un objeto dado.

Endpoint:

PUT /api/v1/roles/:roleId/permissions

Petición:

{
"objectItem": "cattle",
"objectType": "Table",
"permissions": 1
}

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"roleId": "1",
"objectItem": "cattle",
"objectType": "Table",
"permissions": "1",
"id": "1",
"actionId": "1",
"objectId": "1",
"active": true,
"description": "Permission applied in object"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Endpoints para asignar roles dentro de un menú de categoría

Sección titulada «Endpoints para asignar roles dentro de un menú de categoría»

A continuación se muestran los endpoints disponibles para asignar roles a los menús de categoría:

Obtener todos los roles asignados a un menú de categoría

Sección titulada «Obtener todos los roles asignados a un menú de categoría»

Recuperar todos los roles asignados a un menú de categoría específico.

Endpoint:

GET /api/v1/category-menus/roles/:id

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "1",
"name": "Administrador",
"dashboardCustomQuery": "0"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Asignar múltiples roles a un menú de categoría

Sección titulada «Asignar múltiples roles a un menú de categoría»

Asignar múltiples roles a un menú de categoría específico.

Endpoint:

POST /api/v1/category-menus/roles/:id

Petición:

{
"roleIds": [1]
}

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "1",
"name": "Administrador",
"dashboardCustomQuery": "0"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Eliminar uno o más roles de un menú de categoría

Sección titulada «Eliminar uno o más roles de un menú de categoría»

Eliminar uno o más roles de un menú de categoría específico.

Endpoint:

DELETE /api/v1/category-menus/roles/:id

Petición:

{
"roleIds": [2]
}

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "1",
"name": "Administrador",
"dashboardCustomQuery": "0"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Endpoint para gestionar roles dentro de un conjunto de permisos

Sección titulada «Endpoint para gestionar roles dentro de un conjunto de permisos»

A continuación se muestran los endpoints disponibles relacionados con los permisos:

Obtener permisos almacenados en un rol por objeto dado

Sección titulada «Obtener permisos almacenados en un rol por objeto dado»

Recuperar permisos almacenados en un rol en studio por un objeto dado.

Endpoint:

GET /api/v1/permissions/:roleId

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"name": "action",
"permission": true
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Obtener todos los permisos almacenados en un rol por objeto dado

Sección titulada «Obtener todos los permisos almacenados en un rol por objeto dado»

Recuperar todos los permisos almacenados en un rol en studio por un objeto dado.

Endpoint:

GET /api/v1/permissions/all/:roleId

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "1",
"description": "(manage users on system)",
"active": true,
"objectId": "1",
"actionId": "1",
"actionItem": "Manage",
"objectItem": "user",
"objectType": "System",
"allowed": true,
"allowedSdate": "2024-10-23T06:00:00.000Z",
"allowedEdate": "2024-10-23T06:00:00.000Z"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Recuperar los permisos por objeto e ID de rol.

Endpoint:

GET /api/v1/data-studio/:roleId/permission/:objectId

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "0",
"description": "(manage users on system)",
"active": true,
"objectId": "1",
"actionId": "1",
"actionItem": "Manage",
"objectItem": "user",
"objectType": "System",
"allowed": true,
"allowedSdate": "2024-10-23T06:00:00.000Z",
"allowedEdate": "2024-10-23T06:00:00.000Z"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}

Crear permisos almacenados en un rol en studio por objeto dado

Sección titulada «Crear permisos almacenados en un rol en studio por objeto dado»

Crear permisos almacenados en un rol en studio por un objeto dado.

Endpoint:

POST /api/v1/data-studio/:roleId/permission

Petición:

{
"permissions": [
{
"id": "1",
"description": "(manage users on system)",
"active": true,
"objectId": 3196,
"actionId": 2,
"actionItem": "Manage",
"objectItem": "user",
"objectType": "System",
"allowed": true,
"allowedSdate": "2024-10-23T06:00:00.000Z",
"allowedEdate": "2024-10-23T06:00:00.000Z",
"rowAction": "add"
}
]
}

Respuesta:

{
"error": false,
"status": 200,
"message": "string",
"errors": [
{}
],
"data": [
{
"id": "0",
"description": "(manage users on system)",
"active": true,
"objectId": "1",
"actionId": "1",
"actionItem": "Manage",
"objectItem": "user",
"objectType": "System",
"allowed": true,
"allowedSdate": "2024-10-23T06:00:00.000Z",
"allowedEdate": "2024-10-23T06:00:00.000Z"
}
],
"pagination": {
"hasPreviousPage": true,
"hasNextPage": true,
"previousPage": 0,
"nextPage": 0,
"recordsTotal": 0,
"currentPage": 0,
"startIndex": 0,
"numPages": 0,
"limit": 0
}
}