-----------
El endpoint de la API para crear contratos/suscripciones falla cuando se utiliza con un usuario normal que tiene los permisos correctos (ID 162: contract->creer). El sistema verifica correctamente los permisos, pero falla durante la ejecución posterior. Este mismo endpoint funciona correctamente con el usuario superadministrador.
Este es un bug de regresión - funcionaba correctamente en versiones anteriores a la 22.0.2.
Versión Afectada
----------------
- Dolibarr: 22.0.2
- Versión anterior que funcionaba: (versiones anteriores a 22.0.2)
Endpoint Afectado
-----------------
POST /api/index.php/contracts
Pasos para Reproducir
----------------------
1. Crear un usuario normal (no superadministrador)
2. Asignar al usuario el permiso ID 162 (user->hasRight('contract','creer'))
3. Ejecutar la siguiente llamada API con la clave API del usuario:
Código: Seleccionar todo
curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'DOLAPIKEY: xxxxxxxxxxxxxxxxxxxxx' \
-d '{
"socid": "22",
"date_contrat": 1759738652,
"commercial_signature_id": 1,
"commercial_suivi_id": 1,
"note_public": "TEST 22.0.2"
}' \
'https://example.com/dolibarr/api/index.php/contracts'------------------
El contrato debería crearse exitosamente, retornando el ID del nuevo contrato.
Resultado Actual - CON Permiso (línea 233)
-------------------------------------------
Error 500:
Código: Seleccionar todo
{
"error": {
"0": "Failed to add contract",
"code": 500,
"message": "Internal Server Error: Error creating contract"
},
"debug": {
"source": "api_contracts.class.php:233 at call stage",
"stages": {
"success": ["get", "route", "negotiate", "authenticate", "validate"],
"failure": ["call", "message"]
}
}
}-------------------------------------------
Error 403 (comportamiento correcto):
Código: Seleccionar todo
{
"error": {
"code": 403,
"message": "Forbidden: Insufficient rights"
},
"debug": {
"source": "api_contracts.class.php:211 at call stage",
"stages": {
"success": ["get", "route", "negotiate", "authenticate", "validate"],
"failure": ["call", "message"]
}
}
}--------
La diferencia en los números de línea de error indica que:
- Línea 211: La verificación de permisos funciona correctamente
- Línea 233: Falla durante la ejecución real del método create() o similar, DESPUÉS de pasar la verificación de permisos
- Con superadministrador: Funciona sin problemas
Esto sugiere que hay una verificación de permisos adicional o una diferencia en el contexto de ejecución entre superadministrador y usuario normal en algún lugar entre las líneas 211 y 233 del archivo api_contracts.class.php.
Comportamiento con Superadministrador
--------------------------------------
La misma llamada API funciona correctamente cuando se utiliza la clave API del superadministrador.
Permisos Verificados
---------------------
El usuario tiene correctamente asignado:
- ID: 162
- Derecho: user->hasRight('contract','creer')
Información Técnica
-------------------
- Archivo: api_contracts.class.php
- Línea con permiso correcto: 233 (error 500)
- Línea sin permiso: 211 (error 403 - comportamiento correcto)
- Las etapas de autenticación y validación pasan correctamente en ambos casos
Impacto
-------
Este bug impide que usuarios normales puedan crear contratos mediante la API, incluso teniendo los permisos necesarios. Esto bloquea completamente la integración automatizada con sistemas externos para usuarios no administradores.
