Processus de la fonction autoriser()

Les autorisations par défaut de SPIP sont écrites dans le fichier ecrire/inc/autoriser.php

Lorsque l’on demande à SPIP une autorisation autoriser($faire, $type), SPIP part à la recherche d’une fonction pour traiter l’autorisation demandée. Il recherche dans cet ordre une fonction nommée :

  • autoriser_$type_$faire,
  • autoriser_$type,
  • autoriser_$faire,
  • autoriser_defaut,
  • puis la même chose avec le suffixe _dist.

Réécriture du paramètre ’type’

Le paramètre type subit deux transformations avant d’être utilisé pour trouver les fonctions d’autorisations :

  • Il passe par la fonction objet_type, qui trouve le type d’objet à partir du nom d’objet ou de table. Typiquement, ça passe du nom de table avec un ’s’ (pluriel) au nom d’objet sans ’s’. On peut désactiver cela en commençant rajoutant un souligné ’_’ au début du type lors de l’appel.
  • Tous les caractères soulignés ’_’ sont supprimés pour le calcul des noms de fonction d’autorisation spécialisée.

Exemple

autoriser('modifier','article',$id_article);

Va retourner la première fonction trouvée et l’exécuter. C’est celle-ci :

function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt){
...
}

La fonction reçoit les mêmes paramètres que la fonction autoriser(). Dedans, $qui est renseigné par l’auteur en cours s’il n’a pas été transmis en argument dans l’appel à autoriser().

Pour les transformations du "type" :

  1. autoriser('modifier', 'a_b_objets')

va utiliser comme type "abobjet" pour chercher la fonction spécialisée.

Et si on préfixe par un souligné :

  1. autoriser('modifier', '_configs')

cela utilisera "configs"… sans chercher de type d’objet, donc en laissant le mot tel quel (mais en supprimant toujours les soulignés).

Auteur Matthieu Marcillaud Publié le : Mis à jour : 18/01/21

Traductions : English, français, Nederlands