Il arrive qu’on ait besoin de faire une action qui sera soumise à autorisation pour un auteur qui normalement n’en a pas le droit. Cela peut se produire, par exemple, dans le cas d’une action programmée qui sera alors exécutée anonymement.
Dans ce cas, il existe un mécanisme via la fonction autoriser_exception
qui donne une autorisation exceptionnelle, le temps de réaliser l’action concernée.
include_spip('inc/autoriser');
// donner une autorisation exceptionnelle temporaire
autoriser_exception('modifier', 'article', $id_article);
// réaliser l'action désirée
include_spip('action/editer_objet');
objet_modifier('article', $id_article, array('titre' => 'Nouveau titre'));
// retirer l'autorisation exceptionnelle
autoriser_exception('modifier', 'article', $id_article, false);
La fonction autoriser_exception($faire, $type, $id, $autoriser)
prend 4 arguments :
-
$faire
avec la même signification que pourautoriser()
-
$type
avec la même signification que pourautoriser()
-
$id
avec la même signification que pourautoriser()
-
$autoriser
qui est un booléen et indique si l’autorisation exceptionnelle est accordée ou non :- Lorsque
$autoriser
vaut «true
» ou n’est pas fourni, on accorde une autorisation exceptionnelle : tous les appels suivant àautoriser()
avec les mêmes arguments$faire, $type
et$id
renverronttrue
- Lorsque
$autoriser
vaut «false
» cela signifie que l’autorisation revient sous le régime normal et sera vérifiée selon la règle en vigueur (elle peut donc être encore autorisée ou effectivement interdite). Lefalse
n’indique donc pas ici qu’on interdit l’action, mais simplement qu’il n’y a plus d’exception.
- Lorsque
Attention : Au cours de l’installation de SPIP, au moment de l’installation d’un plugin placé dans plugins-dist, il se peut que le statut de webmestre ne soit pas encore en place à cette étape du processus d’installation, et dans ce cas, les opérations requérant un statut de webmestre échoueront.
Depuis SPIP 4.0 autoriser_exception
accepte un argument *
en guise d’id :
– quand on autorise une exception avec *
, cela l’autorise pour tout id
– quand on annule une exception avec *
, cela annule toutes les exceptions pour cet objet, même celles qui auraient été posées individuellement avec des ids