Autorisations pour les Auteurs

  un exemple de code PHP

Pour protéger l’accès aux contenus, plusieurs pages du Web rappellent le fonctionnement des Autorisations dans SPIP.

Mais ...... c’est du code PHP : pas évident de s’autoriser à écrire des fonctions pour l’autoriser !

Alors, il suffit par exemple de retrouver ce bout de code écrit par un spipeur.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 Le problème d’origine

Lorsqu’on autorise l’accès du back-office à des auteurs déclarés comme simples rédacteurs, ceux-ci peuvent alors accéder à toutes les informations des autres auteurs du site (en particulier déjà à leur e-mail, ce qui constitue une première indiscrétion).
De plus, si le site utilise aussi le plugin Coordonnées, l’interface privée donne possibilité de consulter toutes les données personnelles enregistrées : adresse, téléphone, etc ......

 Principe de solution

A ce jour d’avant 11 Novembre, la solution mise en commun est construite sur le principe montré ci-dessous (tout en restant incomplète et imparfaite [1], voir ci-dessous.

On rajoutera un code source définissant des autorisations, inspiré du code ci-dessous proposé par MisterGraphX dans l’inclure du fichier mes_fonctions pour masquer certains éléments de menu back-office.

Dans un premier temps, seul le code originel -qui ne répond pas au même besoin : à adapter- reste publié ici pour mémoire, en espérant que les commentaires du source vous suffiront !

  1. // A placer dans mes_options
  2. //  Masquer des entrée du menu de l'espace privé à des Admins NON webmestre
  3. //  https://contrib.spip.net/Autorisations-Dans-Spip#nh2
  4. //  API autoriser : https://www.spip.net/fr_article5528.html
  5. //  Autorisation des items de premier niveau du bandeau
  6. // https://code.spip.net/autodoc/tree/ecrire/inc/autoriser.php.html#function_autoriser_menugrandeentree_dist
  7. function autoriser_menugrandeentree($faire, $type, $id, $qui, $opt) {
  8.                 // var_dump('faire: ' .$faire . ' - type: ' .$type.' - QUI ? '.print_r($qui,1));
  9.                 if (isset($type)) {
  10.                         if($type == 'menupublication'
  11.                                 || $type == 'menuactivite'
  12.                                 || $type == 'menuconfiguration'
  13.                                 ){
  14.                                         return $qui['statut'] == '0minirezo' AND $qui['webmestre'] == 'oui';
  15.                         }
  16.  
  17.                 }
  18.                 return $qui['statut'] == '0minirezo';
  19. }
  20.  
  21. function autoriser_auteurs_menu($faire, $type, $id, $qui, $opt) {
  22.     return $qui['statut'] == '0minirezo' AND $qui['webmestre'] == 'oui';
  23. }
  24.  
  25. function autoriser_compositions_menu($faire, $type, $id, $qui, $opt) {
  26.     return $qui['statut'] == '0minirezo' AND $qui['webmestre'] == 'oui';
  27. }
  28.  
  29. function autoriser_mediabox_menu($faire, $type, $id, $qui, $opt) {
  30.     return $qui['statut'] == '0minirezo' AND $qui['webmestre'] == 'oui';
  31. }

Télécharger

L’exemple ci-dessus est enregistré pour mémoire, car il est issu d’un dialogue sur le canal IRC et sur la liste....
En résultats recherchés, on masque certains choix de menus dans l’interface privée [2]...

 Solution intermédiaire

Par exemple, dans l’implantation voulue [3] le rédacteur ne peut plus accéder aux autres fiches par ./ecrire/?exec=auteur&id_auteur=xx

Ainsi, voici la surcharge de fonction d’autorisation à opérer pour masquer la fiche auteur :

  1. // Pour voir une fiche auteur : être admin ou bien il s'agit de sa
  2. propre fiche
  3. function autoriser_auteur_voir($faire, $type, $id, $qui, $opt) {
  4.          if (
  5.                  ($qui['statut'] == '0minirezo')
  6.                  or ($qui['id_auteur'] == $id)
  7.          ) {
  8.                  return true;
  9.          }
  10.          else return false;
  11. }

Télécharger

Du coup, il est possible de faire une fonction de camouflage de l’email (ci-dessous), que vous pourriez utiliser comme filtre complémentaire dans vos squelettes [4] :

  1. // masquer un email si on est pas autorisé
  2. function camoufler_email($email,$id) {
  3.          include_spip('inc/autoriser');
  4.          // on camoufle sauf autorisation
  5.          if (!autoriser('voir','auteur', $id)) {
  6.                  $email = spip_substr($email,0,3) . "*****";
  7.          }
  8.      return $email;
  9. }

Télécharger

Mais ! Tout rédacteur a toujours la vision des adresses mails via la page ./ecrire/?exec=auteurs

Une solution simple (que vous trouveriez en relançant avec le paramètre ./ecrire/?exec=auteurs&var_mode=inclure) : surcharger la noisette correspondante des squelettes du privé (organisés sous Z) !

Il vous suffira donc de rajouter un test de statut sur la ligne correspondante en

  1. ../squelettes/prive/objets/liste/auteurs.html[50]
  2. _ <td class='email'>[(#SESSION{statut}|=={0minirezo}|oui)[<a href='mailto:(#EMAIL)'>[(#EMAIL|couper{30})]</a>]]</td>

Télécharger


Merci de nous signaler les coquilles ou erreurs qui figureraient dans cette page.

[1Les Liens d’accès sont masqués dans l’interface, mais ce n’est pas parce qu’un lien n’est pas directement visible, qu’il est
inaccessible.

[2Le code ci-dessus masque d’autres choix, attention !

[3Qui sera fournie ultérieurement /merci SpipFactory

[4Il serait peut-etre plus "politiquement correct dans l’esprit SPIP" de transformer la fonction en surcharge de la balise #EMAIL d’origine, ou au moins comme balise logique (c’est-a-dire fonctionnant comme un #REM conditionnel)


Liens visibles seulement pour les inscrits.

Article publié le 8 novembre, et actualisé en décembre 2018 .

Répondre à cet article