Bonjour,
J’avais proposé, il y a quelques temps,
une suggestion pour le pipeline autoriser :
http://article.gmane.org/gmane.comp.web.spip.devel/55643/
Je viens de travailler à nouveau sur ce sujet
et j’ai réalisé le plugin « ciautoriser ».
a) Rappel du problème :
Le pipeline « autoriser » permet de charger des fonctions
d’autorisations au tout premier appel de la fonction autoriser().
Par exemple, si un plugin doit intervenir
sur les droits d’accès aux rubriques,
il peut définir, via ce pipeline,
la fonction « autoriser_rubrique_voir ».
Si un second plugin doit également intervenir,
de manière différente, sur les droits d’accès aux rubriques,
la fonction « autoriser_rubrique_voir »
figurera dans les deux plugins.
On peut vérifier l’existence de la fonction préalablement,
mais une seule fonction « autoriser_rubrique_voir »
pourra être utilisée.
b) Le plugin « ciautoriser » :
Face à ce problème, j’ai créé le plugin
intitulé « ciautoriser » qui définit
les fonctions suivantes :
autoriser_rubrique_publierdans
autoriser_rubrique_voir
autoriser_article_voir
autoriser_breve_voir
autoriser_site_voir
autoriser_rubrique_modifier
autoriser_article_modifier
autoriser_breve_modifier
autoriser_site_modifier
et ajoute, à l’intérieur de ces fonctions,
un appel la fonction ciautoriser_pipeline :
Exemple :
function autoriser_rubrique_voir($faire, $type, $id, $qui, $opt) {
return ciautoriser_pipeline($faire, $type, $id, $qui, $opt);
}
Cette fonction ciautoriser_pipeline
offre le pipeline 'ciautoriser'.
Dans les paramètres passés à ce pipeline,
on ajoute un tableau des autorisations.
Exemple :
$param['autorisations'][] = array('autoriser' => true, 'operateur' => 'OR');
Le paramètre 'autoriser' vaut true ou false
et l’opérateur peut être 'OR' ou 'AND' ou 'dist'
La fonction ciautoriser_pipeline
fait ensuite appel à une fonction qui
calcule le résultat d'un ensemble d'autorisations
de la manière suivante :
(dist OR cumul_des_OR) AND cumul_des_AND
L’idée est d’avoir l’équivalent d’une combinaison
de clauses « AND » et « OR »
et de tenir compte des fonctions dist.
c) A titre d’illustration, le plugin "cirv : rédacteur valideur",
qui offre la possibilité d'autoriser certains rédacteurs
à publier leurs propres articles, utilise le plugin 'ciautoriser'.
Les deux sont téléchargeables à l’adresse suivante :
http://www.spip-contrib.net/cirv-plugin-redacteur-valideur
d) Ne serait-il pas intéressant que le principe
utilisé par le plugin «ciautoriser »
soit intégré dans la fonction inc/autoriser.php ?
Cordialement
Imberti