Saltar al contenido principal

API de Grupos

Endpoints para gestionar grupos y sus permisos. Los grupos se usan para implementar control de acceso basado en roles (RBAC).

Listar Grupos

Devuelve todos los grupos de la compañía.

GET/v1/groups

Permiso Requerido: read

Parámetros de Consulta:

ParámetroTipoPor defectoDescripción
pageinteger1Número de página
per_pageinteger20Elementos por página (máx: 100)
include_globalbooleantrueIncluir grupos de sistema/globales

Ejemplo de Solicitud:

curl "https://api.console.solucao42.com.br/v1/groups" \
-H "Authorization: Bearer YOUR_TOKEN"

Respuesta: 200 OK

{
"total": 4,
"quantity": 4,
"records": [
{
"_id": "507f1f77bcf86cd799439011",
"name": "Administrators",
"slug": "administrators",
"description": "Full system access",
"company_id": "507f1f77bcf86cd799439012",
"is_global": false,
"roles": [
{
"name": "Admin",
"target": "*",
"actions": ["*"]
}
],
"permissionIds": [],
"created_at": "2024-01-15T10:30:00.000Z"
}
]
}

Obtener Grupo

Devuelve un único grupo por ID.

GET/v1/groups/:id

Permiso Requerido: read

Ejemplo de Solicitud:

curl https://api.console.solucao42.com.br/v1/groups/507f1f77bcf86cd799439011 \
-H "Authorization: Bearer YOUR_TOKEN"

Crear Grupo

Crea un nuevo grupo.

POST/v1/groups

Permiso Requerido: create

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
namestringNombre del grupo (mín 2 caracteres)
slugstringIdentificador seguro para URL
descriptionstringDescripción (mín 10 caracteres)
rolesobject[]NoArray de objetos de rol
permissionIdsstring[]NoIDs de permisos a asignar

Objeto Rol:

CampoTipoRequeridoDescripción
namestringNombre del rol
targetstringRecurso objetivo (* para todos)
actionsstring[]Acciones permitidas (mín 1)

Ejemplo de Solicitud:

curl -X POST https://api.console.solucao42.com.br/v1/groups \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Content Editors",
"slug": "content-editors",
"description": "Can create and edit content, but not delete",
"roles": [
{
"name": "Content Manager",
"target": "content",
"actions": ["read", "create", "update"]
}
]
}'

Respuesta: 201 Created

{
"_id": "507f1f77bcf86cd799439015",
"name": "Content Editors",
"slug": "content-editors",
"description": "Can create and edit content, but not delete",
"company_id": "507f1f77bcf86cd799439012",
"is_global": false,
"roles": [
{
"name": "Content Manager",
"target": "content",
"actions": ["read", "create", "update"]
}
],
"permissionIds": [],
"created_at": "2024-03-01T10:30:00.000Z"
}

Patrón de Slug:

El slug debe coincidir con: ^[a-z0-9]+(?:-[a-z0-9]+)*$

Válido: editors, content-editors, team-a-editors Inválido: Editors, content_editors, content--editors


Actualizar Grupo

Actualiza un grupo existente.

PUT/v1/groups/:id

Permiso Requerido: update

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
namestringNoNuevo nombre del grupo
slugstringNoNuevo slug
descriptionstringNoNueva descripción

Ejemplo de Solicitud:

curl -X PUT https://api.console.solucao42.com.br/v1/groups/GROUP_ID \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Senior Editors",
"description": "Experienced content editors with expanded access"
}'

Eliminar Grupo

Elimina un grupo.

DELETE/v1/groups/:id

Permiso Requerido: delete

Ejemplo de Solicitud:

curl -X DELETE https://api.console.solucao42.com.br/v1/groups/GROUP_ID \
-H "Authorization: Bearer YOUR_TOKEN"

Respuesta: 204 No Content

Errores:

EstadoCódigo de ErrorDescripción
400CANNOT_DELETE_GLOBALNo se pueden eliminar grupos de sistema

Agregar Permisos

Agrega permisos a un grupo (se añaden a los existentes).

POST/v1/groups/:id/permissions

Permiso Requerido: update

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
permissionIdsstring[]IDs de permisos a agregar (mín 1)

Ejemplo de Solicitud:

curl -X POST https://api.console.solucao42.com.br/v1/groups/GROUP_ID/permissions \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permissionIds": ["perm-1", "perm-2"]
}'

Reemplazar Permisos

Reemplaza todos los permisos de un grupo.

PUT/v1/groups/:id/permissions

Permiso Requerido: update

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
permissionIdsstring[]Nuevos IDs de permisos

Ejemplo de Solicitud:

curl -X PUT https://api.console.solucao42.com.br/v1/groups/GROUP_ID/permissions \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permissionIds": ["perm-3", "perm-4"]
}'

Eliminar Permisos

Elimina permisos específicos de un grupo.

DELETE/v1/groups/:id/permissions

Permiso Requerido: update

Cuerpo de Solicitud:

CampoTipoRequeridoDescripción
permissionIdsstring[]IDs de permisos a eliminar

Ejemplo de Solicitud:

curl -X DELETE https://api.console.solucao42.com.br/v1/groups/GROUP_ID/permissions \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"permissionIds": ["perm-1"]
}'

Objeto Grupo

CampoTipoDescripción
_idstringIdentificador único
namestringNombre para mostrar
slugstringIdentificador seguro para URL
descriptionstringDescripción del grupo
company_idstringID de compañía padre
is_globalbooleanSi es un grupo de sistema
rolesobject[]Definiciones de roles
permissionIdsstring[]IDs de permisos asignados
created_atstringTimestamp de creación ISO 8601
updated_atstringTimestamp de última actualización ISO 8601

Objeto Rol

CampoTipoDescripción
namestringNombre del rol
targetstringRecurso objetivo (ej. users, content, *)
actionsstring[]Acciones permitidas: read, create, update, delete, *

Patrones Comunes de Grupos

Admin con Acceso Total

{
"name": "Administrators",
"slug": "administrators",
"description": "Full system access for administrators",
"roles": [
{
"name": "Admin",
"target": "*",
"actions": ["*"]
}
]
}

Visor Solo Lectura

{
"name": "Viewers",
"slug": "viewers",
"description": "Read-only access to all resources",
"roles": [
{
"name": "Viewer",
"target": "*",
"actions": ["read"]
}
]
}

Editor de Recurso Específico

{
"name": "Content Editors",
"slug": "content-editors",
"description": "Can manage content but not other resources",
"roles": [
{
"name": "Content Manager",
"target": "content",
"actions": ["read", "create", "update", "delete"]
},
{
"name": "User Viewer",
"target": "users",
"actions": ["read"]
}
]
}

Ejemplos de Código

const API_URL = 'https://api.console.solucao42.com.br';

// Listar grupos
async function listGroups(token) {
const response = await fetch(`${API_URL}/v1/groups`, {
headers: { 'Authorization': `Bearer ${token}` },
});
return response.json();
}

// Crear grupo
async function createGroup(token, group) {
const response = await fetch(`${API_URL}/v1/groups`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify(group),
});
return response.json();
}

// Agregar permisos a grupo
async function addPermissions(token, groupId, permissionIds) {
const response = await fetch(`${API_URL}/v1/groups/${groupId}/permissions`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ permissionIds }),
});
return response.json();
}

// Uso
const newGroup = await createGroup(token, {
name: 'Editors',
slug: 'editors',
description: 'Content editors with limited access',
roles: [
{ name: 'Editor', target: 'content', actions: ['read', 'update'] }
]
});

await addPermissions(token, newGroup._id, ['perm-1', 'perm-2']);