
J’ai défini des constantes pour définir les permissions dans Dotclear et les plugins peuvent eux aussi en définir de nouvelles, ce qui est le cas de :
- Blogroll : dcLinks::PERMISSION_BLOGROLL =
'blogroll'
- Pages : dcPages::PERMISSION_PAGES =
'pages'
Donc normalement, au lieu d’indiquer des permissions comme par exemple 'usage,contentadmin,pages'
pour le plugin Attachments, on peut utiliser :
dcCore::app()->auth->makePermissions([
dcAuth::PERMISSION_USAGE,
dcAuth::PERMISSION_CONTENT_ADMIN,
dcPages::PERMISSION_PAGES,
]);
Ça évite de se tromper de libellé de permission et ça rend transparent une future modification de celui-ci.
Sauf que…
Comme le plugin Attachments est chargé avant le plugin Pages, ça hurle sur l’écran parce qu’il ne connait pas (encore) dcPages::PERMISSION_PAGES :-p
Évidemment !
La solution idéale serait de modifier l’autoloader pour qu’il se débrouille tout seul, mais on en est pas encore là dans la branche 2 de Dotclear1
À ce stade, trois solutions :
Laisser les libellés en l’état, mais c’est moche ces libellés répétés partout dans le code !
Faire en sorte que le plugin Pages soit chargé avant le plugin Attachments2
Faire en sorte que les permissions soient connues avant le chargement effectif des plugins.
J’avoue que la 3e me titille un peu et je suis à ça de rajouter un fichier _init.php
3 dans les plugins en question (ceux qui définissent leur propre permission) et les charger avant tout le reste.
Z’en dites ?
Pour info, l’ordre de chargement des fichiers d’un plugin est celui-ci :
_define.php
._prepend.php
(s’il existe).locales/??/main.po
oulocales/??/main.php
(fichier de traduction), en fonction de la langue (s’il existe), ainsi que l’éventuel fichier d’aidelocales/resources.php
; dans le contexte d’administration uniquement._admin.php
ou_public.php
ou_xmlrpc.php
selon le contexte (s’il existe).
Les possibilités de nom qui me viennent en tête :
_init.php
_bootstrap.php
_load.php
1 De Bernard -
et si le plugin
Attachments
(Dotclear) conservait sa structure initiale ?'permissions' => 'contentadmin,pages'
Bon d’accord ça fait un peu “bricolage” mais puisqu’il faut quand même permettre la retroactivité des plugins anciens… ;-)
2 De Bernard -
Euh… ces constantes sont définies à quel endroit/moment ?
3 De Franck -
J’ai poussé tout ça en fin d’après-midi sur le dépôt ;-)