Bienvenido a los foros %s

Foro comunidad hispana Dolibarr

Identificarse Registrarse

La Creación de Contratos por API Falla para Usuarios No-Administradores en la Versión 22.0.2

Si cree que ha encontrado un error en una versión estable, siéntase libre de comunicarlo aquí, indicando la versión.
leontic
Novato
Mensajes: 4
Registrado: Mar, 30/05/2023, 12:20

La Creación de Contratos por API Falla para Usuarios No-Administradores en la Versión 22.0.2

Mensaje por leontic »

Descripción
-----------
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'
Resultado Esperado
------------------
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"]
    }
  }
}
Resultado Actual - SIN Permiso (línea 211)
-------------------------------------------
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"]
    }
  }
}
Análisis
--------
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.