Introduction
Il s’agit ici de montrer comment utiliser l’API de SPIP sur les autorisations, pour donner (ou non !) aux utilisateurs des droits de configuration :
- sur le Couteau Suisse en entier,
- sur une lame [1] en particulier
- sur une catégorie entière de lames
- ou sur une variable en particulier.
Dans le cas d’une mutualisation, cela multiplie les possibilités car là, les autorisations peuvent être différentes pour chacun des sites mutualisés. Ces paramètres se définissent dans le fichier mes_options.php de /config qui se trouve en racine de SPIP. Nous conseillons pour des sites mutualisés de tout mettre dans ce mes_options.php, même si cela est possible aussi d’utiliser le config/mes_options.php de chaque site.
Les fonctions d’autorisation sont appelées :
- à chaque fois qu’un outil est sollicité en partie privée pour être manipulé (vu ou configuré)
- à chaque fois qu’une variable est appelée à être modifiée
Une fonction d’autorisation doit renvoyer :
- vrai, si l’autorisation est donnée
- faux, si l’autorisation est refusée
Notez que cet article s’adresse aux utilisateurs du Couteau Suisse dont la version est supérieure à 1.8.10.03. N’hésitez pas à mettre à jour votre plugin régulièrement. Pour en savoir plus sur l’API des autorisation SPIP : http://programmer.spip.org/-Gestion...
Autorisation générale sur le Couteau Suisse
Voici un bout de code du Couteau Suisse, trouvé dans le fichier cout_options.php :
// Droits pour configurer le Couteau Suisse (fonction surchargeable sans le _dist)
// Droits par défaut équivalents à 'configurer' les 'plugins', donc tous les administrateurs non restreints
function autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt) {
return autoriser('configurer', 'plugins', $id, $qui, $opt);
}
Ce code montre que ce plugin peut être configuré par tous les utilisateurs qui ont le droit de configurer l’ensemble des plugins. En fait, ce sont par défaut tous les administrateurs non restreints. Le ’_dist’ de la fonction ci-dessus indique qu’elle peut être surchargée en fonction de vos propres besoins en écrivant vous même la fonction autoriser_cs_configurer($faire, $type, $id, $qui, $opt). Attention cette surcharge ne doit être présente qu’une seule fois !
Voici quelques exemples, histoire d’y voir plus clair.
- Ici, seuls les webmestres peuvent configurer le Couteau Suisse et ce réglage concerne tous les sites dans le cas d’une mutualisation :
// Autorisons seulement les webmestres à configurer le CS
function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', $type, $id, $qui, $opt);
}
- Ici, seuls les auteurs avec l’id X peuvent configurer le Couteau Suisse et ce réglage concerne tous les sites dans le cas d’une mutualisation :
// Autorisons tous les id 1 de la mutualisation a configurer le CS
function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
return $qui['id']===1;
}
- Ici, seul l’auteur connu sous le non de kifkif peut configurer le Couteau Suisse et ce réglage concerne tous les sites dans le cas d’une mutualisation :
// Autoriser seulement l'auteur appeler kifkif a configurer le CS
function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
return $qui['nom']==='kifkif';
}
- Ici, dans une mutualisation, seuls les administrateurs non restreints (réglage par défaut) d’un site précis peuvent le configurer le Couteau Suisse (évidement dans le cas ou vous avez un seul site ce réglage ne sert à rien) :
// Autorisons le CS seulement sur le site 'www.toto.ici'
function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
return $_SERVER['HTTP_HOST']==='www.toto.ici';
}
- Ici, dans une mutualisation, seuls les webmestres (déclarés dans mes_options avec un define) peuvent configurer le couteau suisse SAUF sur le site nommé où tous les administrateurs non restreints ont les droits.
// Sur tous les sites, seul le webmestre peut configurer SAUF sur le site 'www.toto.ici' où le réglage par défaut est demandé
function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
return $_SERVER['HTTP_HOST']==='www.toto.ici'
?autoriser_cs_configurer_dist($faire, $type, $id, $qui, $opt)
:autoriser('webmestre', $type, $id, $qui, $opt);
}
Autoriser une lame [1] grâce aux autorisations SPIP
Lorsqu’un outil est sollicité en partie privée, le Couteau Suisse va s’assurer de toutes les lignes suivantes avant d’en donner les droits à l’utilisateur :
- Vérifier l’autorisation générale pour l’utilisateur de manipuler le Couteau Suisse
- Vérifier que la version de SPIP est la bonne pour l’outil en question
- Vérifier l’autorisation de manipuler cet outil
- Vérifier l’autorisation de manipuler la catégorie de cet outil
- Et enfin vérifier l’autorisation définie dans l’outil lui-même, si elle existe (paramètre ’autoriser’ du tableau de configuration)
Lorsqu’un outil est bloqué par les autorisations, alors :
- Il n’apparait pas dans la liste des outils actifs ou inactifs
- S’il tape l’adresse à la main, l’utilisateur tombe sur une page indiquant : Accès interdit
- Une information apparait dans le cadre d’information à gauche de la page : Non paramétrables : 1
La fonction dont nous avons besoin ici doit être nommée comme ceci : ’autoriser_outil_’ auquel on ajoute l’id de l’outil, suivi de ’_configurer’.
Utilisons par exemple ce système pour interdire totalement une lame :
// Interdire la "Corbeille" pour tout le monde
// $opt est un tableau qui contient quelques infos sur l'outil appelant
function autoriser_outil_corbeille_configurer($faire, $type, $id, $qui, $opt) {
return false;
}
Dans ce 2e exemple, laissons la configuration d’une lame en particulier (ici maj_auto) à tel ou tel site quand on a des sites mutualisés et interdisons-la dans les autres sites :
// Interdire la "Mise à jour automatique" sur tous les sites mutualisés sauf sur 'www.toto.ici'
// $opt est un tableau qui contient quelques infos sur l'outil appelant
function autoriser_outil_maj_auto_configurer($faire, $type, $id, $qui, $opt) {
return $_SERVER['HTTP_HOST']==='www.toto.ici';
}
Afin de vous aider à écrire facilement les fonctions dont vous avez besoin, voici la liste des lames pour la version 2.0 de SPIP (au 17/01/10) :
Outils | id outil | id catégorie |
---|---|---|
Dossier du squelette | dossier_squelettes | admin |
Format des URLs | type_urls | admin |
Gestion du JavaScript | filtrer_javascript | admin |
La corbeille | corbeille | admin |
Limites mémoire | SPIP_tailles | admin |
Liste des webmestres | webmestres | admin |
Lutte contre le SPAM | spam | admin |
Mises à jour automatiques | maj_auto | admin |
Modération modérée | moderation_moderee | admin |
Paragrapher | paragrapher2 | admin |
Pas de forums anonymes | auteur_forum | admin |
Pas de stockage IP | no_IP | admin |
Pas de verrouillage de fichiers | flock | admin |
Prévisualisation des articles | previsualisation | admin |
SPIP et le cache… | spip_cache | admin |
Site en travaux | en_travaux | admin |
Suivi des forums publics | suivi_forums | admin |
Taille des forums | forum_lgrmaxi | admin |
Allègement de l’interface privée | simpl_interface | interface |
Boîtes privées | boites_privees | interface |
Bouton « Visiter » | icone_visiter | interface |
Largeur d’écran | spip_ecran | interface |
Les tris de SPIP | tri_articles | interface |
Page des auteurs | auteurs | interface |
Réglage du sélecteur de rubrique | brouteur | interface |
Type d’interface privée | set_options | interface |
Ancres douces | soft_scroller | public |
Désactive jQuery | f_jQuery | public |
Désactive les objets flash | desactiver_flash | public |
Force la langue | forcer_langue | public |
Jolis Coins | jcorner | public |
SPIP et les liens… externes | SPIP_liens | public |
SPIP et ses raccourcis… | class_spip | public |
Supprime le numéro | supprimer_numero | public |
Validateur XML | xml | public |
Visiteurs connectés | visiteurs_connectes | public |
Balise #INSERT_HEAD | insert_head | spip |
Balise #INTRODUCTION | introduction | spip |
Balises #TITRE_PARENT/OBJET | titre_parent | spip |
Horloge | horloge | spip |
Liens en clair | liens_en_clair | spip |
Masquer du contenu | masquer | spip |
Orientation des images | orientation | spip |
Trousse à balises | trousse_balises | spip |
Version texte | verstexte | spip |
Belles URLs | liens_orphelins | typo-corr |
Belles puces | pucesli | typo-corr |
Citations bien balisées | citations_bb | typo-corr |
Corrections automatiques | insertions | typo-corr |
Exposants typographiques | typo_exposants | typo-corr |
Glossaire interne | glossaire | typo-corr |
Guillemets typographiques | guillemets | typo-corr |
Intertitres en image | titres_typo | typo-corr |
MailCrypt | mailcrypt | typo-corr |
Smileys | smileys | typo-corr |
Sommaire automatique | sommaire | typo-corr |
Blocs Dépliables | blocs | typo-racc |
Blocs multilingues | toutmulti | typo-racc |
Chatons | chatons | typo-racc |
Décoration | decoration | typo-racc |
Découpe en pages et onglets | decoupe | typo-racc |
Filets de Séparation | filets_sep | typo-racc |
Tout en couleurs | couleurs | typo-racc |
Comportements du Couteau Suisse | cs_comportement | divers |
Et une liste des lames spécifiques à la version 1.9.2 de SPIP (au 05/12/09) :
id | Outils | id catégorie |
---|---|---|
set_options | Type d’interface privée | interface |
suivi_forums | Suivi des forums publics | admin |
Autoriser une lame grâce à une constante
La définition d’une constante ’_CS_OUTILS_CACHES’ vous permet facilement de cacher certaines lames. Il suffit d’y lister les ids en les séparant par deux points. Exemple :
define('_CS_OUTILS_CACHES',
'cs_comportement:insert_head:verstexte:type_urls');
En mutualisation, nous pouvons par exemple cacher certaines lames pour tous les sites sauf pour un, qui sera le site maitre :
switch($_SERVER['HTTP_HOST']) {
case 'www.toto.ici':
break;
default:
define('_CS_OUTILS_CACHES', 'maj_auto');
}
Autoriser une catégorie
La fonction dont nous avons besoin ici doit être nommée comme ceci : ’autoriser_categorie_’ auquel on ajoute l’id de la catégorie, suivi de ’_configurer’.
Utilisons par exemple ce système pour interdire totalement la visualisation et la configuration des outils d’une catégorie entière :
// Nous cachons la catégorie 'admin' du Couteau Suisse
// $opt est un tableau qui contient quelques infos sur l'outil sollicité
function autoriser_categorie_admin_configurer($faire, $type, $id, $qui, $opt) {
return false;
}
Ici, une catégorie n’est visible que sur le site nommé et invisible pour le reste de la mutualisation :
// Catégorie absente partout en mutualisation, sauf sur le site
function autoriser_categorie_admin_configurer($faire, $type, $id, $qui, $opt) {
return $_SERVER['HTTP_HOST']==='www.toto.ici';
}
Voici la liste des catégories (au 05/12/09) :
id | Catégories |
---|---|
admin | Administration |
interface | Interface privée |
typo-corr | Améliorations des textes |
typo-racc | Raccourcis typographiques |
public | Affichage public |
spip | Balises, filtres, critères |
divers | Divers |
Autoriser une lame et interdire le reste de la catégorie
Ici, une catégorie est interdite, sauf une lame précise appartenant à cette catégorie. Notez l’utilisation dans ce cas des informations contenues dans $opt et concernant l’outil sollicité :
// Catégorie 'admin' entièrement interdite, sauf la lame 'dossier_squelettes'
function autoriser_categorie_admin_configurer($faire, $type, $id, $qui, $opt) {
return $opt['id']=='dossier_squelettes';
}
Autoriser une variable grâce aux autorisations SPIP
Le Couteau Suisse comporte plus de 120 paramètres de configuration (appelés aussi variables)... Par défaut, ces paramètres sont tous autorisés à la modification pour les utilisateurs autorisés du plugins. A vous de voir s’il est utile d’en modifier l’autorisation au cas par cas.
Lorsqu’une variable est sur le point d’être modifiée, le Couteau Suisse va s’assurer de toutes les lignes suivantes avant d’en donner les droits à l’utilisateur :
- Vérifier l’autorisation générale pour l’utilisateur de manipuler le Couteau Suisse
- Vérifier l’autorisation de manipuler l’outil par lequel la demande a été lancée
- Et enfin vérifier l’autorisation de la variable elle-même, telle que vous pouvez la définir ci-dessous.
Lorsqu’une variable est bloquée par les autorisations, alors :
- la description de l’outil prodit un « input disabled » dans le formulaire : l’utilisateur voit la valeur de la variable, mais il ne peut pas la modifier.
- Une information apparait au bas de ladite description : Paramètres non modifiables : 1
La fonction dont nous avons besoin ici doit être nommée comme ceci : ’autoriser_variable_’ auquel on ajoute l’id de la variable, suivi de ’_configurer’.
Utilisons par exemple ce système pour interdire la modification d’une variable (changement de type d’URL : ’radio_type_urls3’ sous SPIP 2.0) à tous les utilisateurs du site, sauf les webmestres :
// Réserver le changement de type d'URLs aux seuls webmestres
// $opt est un tableau qui contient quelques infos sur l'outil appelant
function autoriser_variable_radio_type_urls3_configurer($faire, $type, $id, $qui, $opt) {
return autoriser('webmestre', $type, $id, $qui, $opt);
}
Notez qu’une liste des variables disponibles est visible ici : [dev] Le Couteau Suisse à piloter.
Évitons les doublons de fonctions
Afin d’éviter de mettre 2 codes qui disent la même chose (et provoquer une erreur fatale), par exemple dans une mutualisation avec un config/mes_options.php à la racine et le config/mes_options.php d’un site mutualisé, il faut utiliser la fonction PHP function_exists :
// Exemple pour éviter les doubles déclarations
if(!function_exists('autoriser_cs_configurer')) {
function autoriser_cs_configurer($faire, $type, $id, $qui, $opt) {
return $qui['id']===1;
}
}
Autorisations définies à la création de l’outil
Dans cet article, il est expliqué comment créer une lame. Dans la syntaxe (format simpliste) des déclarations pour add_outil(), notez le paramètre : ’autoriser’. Celui-ci permet d’insérer un code PHP à exécuter pour définir les droits natifs de voir/manipuler l’outil en partie privée. Cette autorisation, si elle est positive peut être invalidée par les fonctions décrites ci-dessus, mais l’inverse n’est pas possible : une autorisation refusée nativement reste irrévocable.
Le meilleur exemple est la lame « Liste des webmestres ». Rappel de la description de cet outil : « Un webmestre au sens SPIP est un administrateur ayant accès à l’espace FTP. Par défaut, il est l’administrateur id_auteur=1 du site. Les webmestres ont le privilège de ne plus être obligés de passer par FTP pour valider les opérations sensibles du site, comme la mise à jour de la base de données ou la restauration d’un dump. En tant que webmestre vous-même, vous aurez les droits de modifier cette liste. »
Vu que seuls les webmestres ont le droit de modifier la liste des webmestres, voici le code proposé pour cet outil. Notez la fonction SPIP autoriser(’webmestre’) proposée nativement et qui sera appelée à chaque demande de vue ou de configuration de l’outil :
add_variables( array(
'nom' => 'webmestres',
'format' => _format_CHAINE,
'defaut' => '"1"',
'code:strlen(%s)' => "define('_ID_WEBMESTRES', %s);",
'code:!strlen(%s)' => "define('_ID_WEBMESTRES', 1);",
));
add_outil( array(
'id' => 'webmestres',
'code:spip_options' => '%%webmestres%%',
'categorie' => 'admin',
// non supporte avant la version 1.92
'version-min' => '1.9200',
'autoriser' => "autoriser('webmestre')",
));
Astuces
Quand nous avons $_SERVER[’HTTP_HOST’]===’www.toto.ici’, l’autorisation sur la lame (ou la catégorie) n’est donnée QUE si le site est www.toto.ici
Discussions par date d’activité
3 discussions
Merci , cela m’a permis de finaliser l’article sur le couteau suisse de notre plateforme
http://spipfactory.com/Le-Couteau-suisse
Répondre à ce message
hello
comment désactiver la lame : Affiche tout ; je n’ai pas trouvé l’id outil correspondant
A priori : aff_tout
Description de la lame : http://zone.spip.org/trac/spip-zone...
impeccable
Répondre à ce message
Bonjour soit
Catégorie absente partout en mutualisation, sauf sur le site
quel est ID pour la catégorie Développement
merci
A priori : devel
Liste des catégories : http://zone.spip.org/trac/spip-zone...
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |