L'API de modification des objets objet_inserer/modifier/instituer est censée être générique afin de pouvoir appeler uniquement ces fonctions de haut niveau qui font passer automatiquement les modifs dans les pipelines officiels de SPIP. Super.
Sauf qu'à l'intérieur même de certaines, il y a des tests d'autorisations ! Ce qui est par définition non générique, puisque dépendant d'un contexte précis.
autoriser('instituer', $objet, ...
Du coup, il est impossible d'appeler ces fonctions pourtant très propres, pour faire des modifications dans d'autres contextes que ceux par défaut.
Par exemple pour changer le statut d'un objet ça teste si on a le droit : généralement il faut alors être admin ou auteur de l'objet. Et du coup ça interdit la modification *propre* dans un formulaire actionné par des visiteurs anonymes ou de moindre droit. Ou par un script d'ailleurs.
Je ne peux pas appeler :
objet_modifier('article', $id, array('statut' => $truc));
dans un formulaire de mon cru, qui pour telle ou telle condition voudrait changer le statut d'un article (ou d'une patate), et ce peu importe qui actionne ce formulaire.
Je pense qu'il y a un truc qui ne va pas, donc.
À mon avis, il faut dissocier
- les actions unitaires CRUD, qui peuvent être utilisés dans moult contextes qu'on a PAS à prévoir
- et l'action par défaut d'édition d'un objet (action/editer_truc) qui elle doit appeler des autorisations, oui, et qui ensuite appelle les actions de CRUD