Association de mots-clés et autorisation
Création d'un ticket suite à http://permalink.gmane.org/gmane.comp.web.spip.devel/64550
Cas de figure :
- des groupes de mots-clés pour lesquels les rédacteurs ont les droits pour ajouter un mot clé de ces groupes.
- un rédacteur qui visualise un article dont il n'est pas l'auteur et par conséquent pour lequel il n'a pas les droits d'ajouter ou de supprimer un mot-clé.
Néanmoins, ce rédacteur va voir la liste des mots-clés associés à cet article, avec un lien pour supprimer les mots-clés en question, un lien 'Ajouter des mots-clés' lui permettant de charger le formulaire d'ajout de mot-clé.
Si ce rédacteur décide de faire l'une de ces actions (ajout ou suppression), le bloc va se recharger, l'action ne sera pas exécutée et il n'y aura aucun message d'erreur, par exemple pour avertir que l'on n'a pas les droits nécessaires. On a donc une incohérence de l'interface.
En investigant, j'aperçois plusieurs points qui font défaut.
En premier lieu, la fonction autoriser_associermots_dist() regarde simplement si un auteur à le droit en général d'associer des mots-clés d'un groupe en fonction de son statut (admin ou rédacteur) mais ne prends pas en compte si l'individu a le droit de modifier l'objet en question.
Le formulaire EDITER_LIENS du core regarde dans sa fonction charger l'autorisation associerobjets (donc associermots dans notre cas de figure) pour savoir si le formulaire est editable ou non. Dans sa fonction traiter, le formulaire regarde simplement si l'individu a le droit de modifier l'objet en question ou non (mais ne revérifie pas qu'il a les droits d'associer l'objet en question). Par ailleurs, si on n'a pas les droits requis, la fonction traiter ne renvoie pas de message d'erreur.
Le squelette prive/objets/liste/mots_lies.html ne tient compte ni de #ENV{editable} ni d'une quelconque autorisation pour afficher ou non un lien de suppression d'un mot-clé.
La fonction autoriser_groupemots_afficherselecteurmots_dist renvoie toujours true.
Propositions d'évolution
- Faire évoluer l'autorisation associermots pour qu'elle vérifie également, si un $id_objet est passé, que l'invidu a les droits de modifier l'objet en question. Cela permettra que la propriété editable soit correctement renseignée dans le formulaire d'ajout de mot-clé. Par ailleurs, pour les plugins ayant besoin de savoir si quelqu'un a le droit d'associer un mot-clé, cela fera une seule auorisation à vérifier (le problème s'est posé avec coche_mots).
- La fonction traiter de éditer_liens devrait dépendre de associermot (il faut vérifier que cela n'a pas d'incidence pour les autres tables de liens) et non des droits de modification d'un objet. Ces droits peuvent être différents dans un contexte d'autorisations personnalisées.
- Cette même fonction traiter doit renvoyer un message d'erreur si on n'a pas les droits suffisants.
- Le squelette prive/objets/liste/mots_lies.html doit vérifier l'autorisation associermots pour afficher un lien de suppression d'un mot-clé.
- Par cohérence, la fonction autoriser_groupemots_afficherselecteurmots_dist est modifiée pour renvoyer, par défaut, le résultat de l'autorisation associermots.