Donner une autorisation exceptionnelle

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 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

Auteur RastaPopoulos Publié le : Mis à jour : 12/03/23

Traductions : français, Nederlands