Rappel général
Pour restreindre spécifiquement certaines opérations, en particulier les possibilités de gestions dans l’espace privée de SPIP, il faut surcharger les fonctions d’autorisations de SPIP, soit par l’intermédiaire d’un plugin (ldéfinir des zones par accès restreint soit par une lame dédiée et peu connue du Couteau Suisse), soit... définir vos propres fonctions, c’est à dire pratiquer la surcharge de fonctions d’autorisation.
Un exemple pour limiter l’accès à quelques articles
Imaginons que l’on veuille interdire la publication de certains articles : le statut ’publie’ ne peut être affecté que par une opération particulièrement contrôlée dans SPIP, surveillée par l’autorisation d’instituer
Par exemple, on rajoute dans mes_fonctions (à créer éventuellement dans ./config
) :
après une ligne d’intro
- <?php
....
les lignes d’exemples suivantes (en fonction des éléments voulus) :
- bloquer la publication d’articles ciblés :
// la liste des id_articles que l'on ne veut jamais voir publiés
// (plus facile à modifier ici que directement dans la fonction ci-dessous)
define('MES_ARTICLES_BLOCK', '2:56:125:3');
// bloquer la publication
function autoriser_instituer($faire, $type, $id, $qui, $opt) {
if($type == 'article' AND in_array($id, explode(":", MES_ARTICLES_BLOCK))) {
return false;
}
return autoriser('modifier', $type, $id, $qui, $opt);
}La question initiale voulait même ne laisser que les choix de : ’redac’, ’prop’ et ’poub’ ; la réponse attendra....
Si vous voulez contrôler l’accès à des squelettes spécifiques, vous utiliserez plutôt la balise [ (#AUTORISER{...}|sinon_interdire_acces{}) ]
, en vous reportant aux divers articles sur Les autorisations / gestion des droits et les Autorisations Dans Spip.
Utiliser les Autorisations de zones
Dans certains cas, vous allez vouloir piloter des autorisations pour des groupes fluctuants d’auteurs... que vous aimeriez changer avec une interface conviviale.
Les zones d’accès du plugin accès restreint proposent un outil éprouvé pour gérer des regroupements d’auteurs et d’accès, avec les droits d’éditions fondés sur la hiérarchie des rubriques ; toutefois, il n’est pas facile d’en utiliser le concept et le code pour s’en servir pour des autorisations dans vos pages de squelettes, quoique...
Une fonction filtres permet l’équivalent d’une autorisation sur les zones, mais sa syntaxe est bien moins explicite : la function accesrestreint_acces_zone($id_zone,$id_auteur=null)
teste l’appartenance d’un auteur à une zone, ce qui permet d’écrire une balise SPIP
[(#VAL{
id_zone
}|accesrestreint_acces_zone|oui)]
sans doute moins lisible que [ (#AUTORISER{acces,zone,
<code>}) ]
[1], mais qui doit vous permettre de fonder une autorisation à l’auteur sur son appartenance à une zone numérotée !
Et pour valider l’accès à une rubrique [2], il existe aussi un filtre analogue, qui différentie en interne l’accès en espace privé ou public : la function accesrestreint_rubrique_restreinte($id_rubrique, $id_auteur=null)
peut être utilisée de façon analogue pour un test equivalent à [ (#AUTORISER{voir, rubrique,
id_rubrique
}) ]
...
Approcher la programmation d’Acces Restreint
Cela a commencé sur IRC (en 2013...)
J’ai rencontré hier un comportement d’Accès restreint qui m’a paru (fonctionnellement) anormal : un simple Administrateur peut se rajouter les droits d’accès à une zone qui ne lui est pas ouverte !
Ne faudrait-il pas réserver ce comportement aux seuls Webmestres, ou conditionner l’accès aux Administrateurs déjà membres ?
(il est actuellement restreint aux non-admins complets !)
En fait, c’est bien la fonctionnalité qui était voulue (mais il faut le savoir..).
Avec un peu de recherches dans le code (du plugin), les autorisations en cause sont (dans inc/accesrestreint_autoriser.php
) les suivantes :
autoriser_zone_administrer et
autoriser_auteur_affecterzones_dist [3].
Seuls les administrateurs complets non restreints, et les webmestres, ont cette possibilité.
Article publié le 13 décembre 2019, et actualisé en février 2020 Provisoire (à compléter...) .
Répondre à cet article