Re,
En fait c’est plus un souci d’assignation que de droit. $user->rights->facture->lire
vaut bien True
pour user. Par contre après plusieurs tests, j’ai constaté que DolibarrApiAccess::$user
n’est jamais assigné.
Ce n’était pas un problème en 13.x car la fonction index ne faisait pas de security check.
En nous servant de l’astuce (temporaire) de @fmortgat nous avons pu faire marcher notre ancien code légèrement modifié.
($myfunc = function ($obj, $usr) { try { require_once DOL_DOCUMENT_ROOT.'/api/class/api.class.php'; require_once DOL_DOCUMENT_ROOT.'/api/class/api_access.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/api_invoices.class.php'; DolibarrApiAccess::$user=$usr; $myInvoices = new Invoices(); $ret=$myInvoices->index('t.rowid','ASC',100,0,$obj->rowid,'unpaid',''); return count($ret); } catch (Exception $ex) { return 0; } }) ? $myfunc($obj, $user) : 0
On a regardé pas-à-pas ce que l’on pouvait faire avec la notation classique sans injection.
((require_once DOL_DOCUMENT_ROOT.'/api/class/api.class.php') &&
(require_once DOL_DOCUMENT_ROOT.'/api/class/api_access.class.php') &&
(require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/api_invoices.class.php') &&
($myInvoices= new Invoices()) &&
(DolibarrApiAccess::$user=$user)
) ? var_dump(!DolibarrApiAccess::$user->rights->facture->lire) : 666
renvoie bien des 1 sur chaque ligne : l’assignation fonctionne et j’ai bien les droits.
Si maintenant j’essaie de rajouter l’évaluation de index, je me retrouve comme au début de ce post:
((require_once DOL_DOCUMENT_ROOT.'/api/class/api.class.php') &&
(require_once DOL_DOCUMENT_ROOT.'/api/class/api_access.class.php') &&
(require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/api_invoices.class.php') &&
($myInvoices= new Invoices()) &&
(DolibarrApiAccess::$user=$user) &&
( $ret=$myInvoices->index('t.rowid','ASC',100,0,$obj->rowid,'unpaid','')) //appel à la fonction index
) ? var_dump(!DolibarrApiAccess::$user->rights->facture->lire) : 666
Déplacer l’assignation de DolibarrApiAccess::$user avant ou après l’initialisation de $myInvoices ne change rien.
@fmortgat si jamais vous passez par là (ou tout autre personne) nous sommes preneurs de vos conseils !
Merci