Formulaire de config d'un plugin inaccessible

Salut,

je galère avec le formulaire de configuration d’un plugin que je souhaite sécuriser à minima : seul·es les admins doivent pouvoir y accéder, pas les rédacteur·rices.

Actuellement, les admins ont bien accès à la page de configuration mais le formulaire ne s’affiche que pour les webmestres (voir captures jointes en bas de page) et je ne comprends pas pourquoi.

Qu’est-ce que je rate ?

Mon formulaire

J’ai donc un fichier /prive/squelettes/contenu/configurer_bab.html contenant :

[(#AUTORISER{0minirezo}|sinon_interdire_acces)]
<h1 class="grostitre"><:babconfig:configurer_le_theme:></h1>
<div class="ajax">
	#FORMULAIRE_CONFIGURER_BAB
</div>

(les admins ont bien accès à cette page)

Puis, un fichier formulaires/configurer_bab.html vide

Et enfin, mon formulaire dans un fichier formulaires/configurer_bab.php :

<?php
if (!defined('_ECRIRE_INC_VERSION')) return;


/**
 * Un simple formulaire de config,
 * on a juste à déclarer les saisies
 **/
function formulaires_configurer_bab_saisies_dist(){
	// $saisies est un tableau décrivant les saisies à afficher dans le formulaire de configuration
	$saisies = array(
		array(
			'saisie' => 'case',
			'options' => array(
				'nom' => 'bandeau_pub_active',
				'label' => _T('babconfig:bandeau_pub_active'),
				'label_case' => _T('babconfig:bandeau_pub_active_label'),
			)
		),
		array(
			'saisie' => 'explication',
			'options' => array(
				'nom' => 'bandeau_pub_mode_d_emploi',
				'titre' => _T('babconfig:bandeau_pub_mode_d_emploi_titre'),
				'texte' => _T('babconfig:bandeau_pub_mode_d_emploi_texte'),
				'afficher_si' => "@bandeau_pub_active@ == 'on'",
			)
		),
		array(
			'saisie' => 'selecteur_document',
			'options' => array(
				'nom' => 'bandeau_pub_image',
				'label' => _T('babconfig:bandeau_pub_image'),
				'afficher_si' => "@bandeau_pub_active@ == 'on'",
			)
		),
		array(
			'saisie' => 'input',
			'options' => array(
				'nom' => 'bandeau_pub_texte_alternatif',
				'label' => _T('babconfig:bandeau_pub_texte_alternatif'),
				'attention' => _T('babconfig:bandeau_pub_texte_alternatif_attention'),
				'explication_apres' => _T('babconfig:bandeau_pub_texte_alternatif_explication_apres'),
				'afficher_si' => "@bandeau_pub_active@ == 'on'",
			)
		),
		array(
			'saisie' => 'input',
			'options' => array(
				'nom' => 'bandeau_pub_lien',
				'label' => _T('babconfig:bandeau_pub_lien'),
				'attention' => _T('babconfig:bandeau_pub_lien_attention'),
				'placeholder' => _T('babconfig:url_placeholder'),
				'afficher_si' => "@bandeau_pub_active@ == 'on'",
			)
		),
	);
	return $saisies;
}

Captures d’écran

Admin

webmestre

Les formulaires configurer_truc appliquent d’embée l’autorisation dédiée.

Les personnes simplement en charge de la rédaction ne peuvent y accéder (sauf dérogation explicite).

Si tu souhaites personnaliser le réglages par défaut (par exemple en permettant tous les admins (même ceux restreints à un secteur), tu peux reprendre ton exemple avec cette autorisation : AUTORISER{configurerbab}

Puis dans ton fichier bab_autorisations.php

function autoriser_configurerbab_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
	return $qui['statut'] === '0minirezo';
}

NB: Tu pourrais, de ce cas précis, utiliser directement #AUTORISER{sauvegarder} dont la déclaration répond aux mêmes critères.

Merci pour ton retour qui m’a permis de comprendre d’où vient mon problème : j’ai installé le plugin Autorité pour interdire aux admins de configurer le site (voir capture jointe ci-dessous).

Comme je souhaite conserver cette config, j’ai suivi tes conseils mais sans succès :

  • ajout de [(#AUTORISER{configurerbab}|sinon_interdire_acces)] dans prive/squelettes/contenu/configurer_bab.html
  • ajout d"un fichier bab_autorisations.php avec l’autorisation personnalisée (voir ci-dessous)

J’ai activé les log de SPIP et de Autoriser comme indiqué dans la doc mais je ne vois pas d’infos en plus.

C’est possible d’avoir une autorisation perso configurerbab ET le plugins Autoriser d’activé ?
Ou alors, mieux : comment gérer ces autorisations directement depuis mon plugin (donc sans Autorité) à savoir interdire la config du site, admin plugin, etc… mais autoriser la config du plugin bab ?

C’est assez obscur pour moi toutes ces histoires d’autorisations :sweat_smile:

Contenu de bab_autorisations.php

<?php

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
    return;
}

function autoriser_configurerbab_dist(string $faire, string $type, $id, array $qui, array $opt): bool {
    return $qui['statut'] === '0minirezo';
}

Configuration du plugin Autorité

D’après inc/cvt_configurer.php · 5.x · spip / ecrire · GitLab la fonction d’autorisation doit se nommer autoriser_configurer_bab_dist :wink: