Bonjour,
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.
Face à ce problème, j’ai créé un troisième plugin
intitulé «monPluginAutoriser» qui définit
la fonction «autoriser_rubrique_voir»
et ajoute un pipeline à l’intérieur de cette fonction
(pour l’exemple, je le limite à une seule fonction).
Dans les paramètres passés à ce pipeline,
on ajoute $param['autoriser'] = $autoriser.
Si $param['autoriser'] est à false,
la fonction qui utilisera ce nouveau pipeline doit renvoyer false.
Si $param['autoriser'] est à true,
la fonction qui utilisera ce nouveau pipeline
pourra renvoyer true ou false
en fonction des vérifications qu’elle opère.
L’idée est d’avoir l’équivalent d’une combinaison de clauses « AND ».
Extrait du plugin.xml du plugin « monPluginAutoriser »
<pipeline>
<nom>autoriser</nom>
<inclure> monAutoriser_pipeline.php</inclure>
</pipeline>
Extrait du fichier monPluginAutoriser_pipeline.php :
// Voir une rubrique
// Surcharge unique de la dist avec ajout d'un pipeline
function autoriser_rubrique_voir($faire, $type, $id, $qui, $opt) {
$autoriser = true ;
$param = array('faire'=>$faire,'type'=>$type,'id'=>$id,'qui'=>$qui,'opt'=>$opt);
// Equivalent de la "dist"
$autoriser = true;
// Ajout d'un pipeline
// si la variable 'autoriser' est à false,
// la fonction dans le pipeline ne doit pas la modifier
$param['autoriser'] = $autoriser;
$param = pipeline('monAutorisation_autoriser_rubrique_voir', $param);
return $param['autoriser'];
}
Par exemple, dans le premier plugin, on utilise le pipeline
"monAutorisation_autoriser_rubrique_voir":
function 1erplugin_monpipe_autoriser_rubrique_voir($param) {
$type = $param['type'];
$id = $param['id'];
$autoriser = $param['autoriser'];
// si la variable 'autoriser' est à false,
// la présente fonction (dans le pipeline) ne doit pas la modifier
if ($autoriser) {
if (!$id) $autoriser = false;
if ($type == 'rubrique' AND …………………………….)
$autoriser = false;
}
$param['autoriser'] = $autoriser;
return $param;
}
Idem dans le second plugin (avec des vérifications différentes).
J'ai testé avec succès l'ensemble.
Ne serait-il pas intéressant que le principe
utilisé par le plugin «monPluginAutoriser »
soit intégré dans la fonction inc/autoriser.php ?
Au moins pour les fonctions vérifiant l’autorisation de voir
une rubrique, un article,une brève, un site, un document.
Cordialement
Imberti