Skip to content
Extraits de code Groupes Projets
Valider acdb1043 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

"exceptions d'autorisation :

permettre a un plugin qui veut realiser une action 
normalement interdite a l'utilisateur connecte
d'accorder temporairement (sur le hit ou meme moins)
une exception sans pour autant surcharger la fonction.

Utile par exemple pour creer un article et le publier avec l'api articles_set 
sans pour autant bypasser les autorisations dans l'espace prive
Une exception se delivre avec la syntaxe
autoriser_exception('publierdans','rubrique',3);
et peut s'annuler aussitot l'action faite avec
autoriser_exception('publierdans','rubrique',3,false);
"
parent b6da7e63
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -74,6 +74,9 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) { ...@@ -74,6 +74,9 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
if ($type == 'groupes_mot') $type = 'groupemots'; if ($type == 'groupes_mot') $type = 'groupemots';
#if ($type == 'syndic_article') $type = 'syndicarticle'; #if ($type == 'syndic_article') $type = 'syndicarticle';
if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id])
&& autoriser_exception($faire,$type,$id,'verifier')) return true;
// Chercher une fonction d'autorisation // Chercher une fonction d'autorisation
// Dans l'ordre on va chercher autoriser_type_faire, autoriser_type, // Dans l'ordre on va chercher autoriser_type_faire, autoriser_type,
// autoriser_faire, autoriser_defaut ; puis les memes avec _dist // autoriser_faire, autoriser_defaut ; puis les memes avec _dist
...@@ -107,6 +110,22 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) { ...@@ -107,6 +110,22 @@ function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
return $a; return $a;
} }
// une globale pour aller au plus vite dans la fonction generique ci dessus
$GLOBALS['autoriser_exception']=array();
function autoriser_exception($faire,$type,$id,$autoriser=true){
// une static innaccessible par url pour verifier que la globale est positionnee a bon escient
static $autorisation;
if ($autoriser==='verifier')
return isset($autorisation[$faire][$type][$id]);
if ($autoriser===true)
$GLOBALS['autoriser_exception'][$faire][$type][$id] = $autorisation[$faire][$type][$id] = true;
if ($autoriser===false) {
unset($GLOBALS['autoriser_exception'][$faire][$type][$id]);
unset($autorisation[$faire][$type][$id]);
}
return false;
}
// Autorisation par defaut : les admins complets OK, les autres non // Autorisation par defaut : les admins complets OK, les autres non
// http://doc.spip.org/@autoriser_defaut_dist // http://doc.spip.org/@autoriser_defaut_dist
function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) { function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) {
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter