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 pour
autoriser()
-* {{
$type
}} avec la même signification que pour
autoriser()
-* {{
$id
}} avec la même signification que pour
autoriser()
-* {{
$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
renverront
true
-** 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). Le
false
n’indique donc pas ici qu’on interdit l’action, mais simplement qu’il n’y a plus d’exception.
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 3.3
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