Gestion hiérarchisée des accès restreints

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Pouvoir mettre en accès restreint des rubriques et des articles.


Une mise à jour de cet article pour la version 1.8 de SPIP est disponible ici : MAJ 1.8 de l’article « Gestion hiérachisée des accès restreints »

Que permet de faire cette contrib ?

-  Choisir quelle(s) partie(s) de votre site public sera en accès restreint.


-  Définir les visiteurs qui ont le droit de visiter telle ou telle rubrique et leurs articles associés.

Cette contrib n’utilise que les squelettes et les formulaires de spip, vous n’aurez pas à modifier le noyau, ce qui vous permettra de réactualiser spip sans inquiétude quant au fonctionnement de ce système.

Pourquoi « hiérarchisée » ?

Tout simplement parce que si vous mettez la rubrique « recettes cuisines » en accès restreint, alors ce sont tous ses articles ainsi que toutes ses sous-rubriques avec leurs articles qui sont en accès restreint. Par exemple « plats mijotés » et « entrées chaudes » qui sont des sous-rubriques de « cuisine » seront aussi « par héritage » en accès restreint.

Et si un visiteur se voit octroyé le droit de visiter « cuisine », il pourra visiter également « entrées chaudes » et « plats mijotés ». Mais si il ne lui a été donné que le droit de visiter « plats mijotés », il ne pourra pas accéder à « entrées chaudes » ou à sa rubrique parente « cuisine ».

Installation

Pour travailler sur les mêmes bases je partirai d’une distribution 1.7 toute neuve et je vous demanderai d’en faire autant.

Pour exemple vous pourrez voir ce système en action sur
acces_restreint
Je la laisserai en l’état pour un mois ou deux. Il n’est pas exclu qu’au moment où vous lirez cet article ce lien ne soit plus valide.

Décompressez l’archive zip jointe,

et dans la racine du site installez en écrasant si nécessaire :

-  article-dist.html
-  rubrique-dist.html
-  controle_acces_rubrique.html
-  controle_acces_article.html
-  controle_acces_rubrique.php3
-  controle_acces_article.php3.

Dans « ecrire » installez en écrasant si nécessaire :

-  inc_extra.php3
-  mes_options.php3.

C’est fini, la gestion des accès restreints est opérationnelle.

On verra plus tard comment l’adapter à vos propres squelettes. Mais pour tester avec les mêmes bases on travaille avec la distrib.

Utilisation

Nous allons commencer par créer la rubrique « cuisine »
puis deux sous-rubriques « entrées chaudes » et « plats mijotés ».

Ignorez pour l’instant la partie située à la fin du formulaire d’édition de la rubrique. Si elle n’y est pas, mettez-la à « accès tout public »

vous devriez obtenir ça :

Puis maintenant créons un article dans chacune des sous-rubriques : moi, j’ai choisi « daube » dans « plats mijotés » et « chèvres chauds sur son lit de cressonnette » dans « entrées chaudes » (c’est pour vous donner envie d’aller au bout de l’article :-) ). Publiez en ligne ces deux articles.

Et maintenant nous allons mettre en accès restreint la rubrique « plats mijotés ». Modifiez la rubrique « plats mijotés » et modifiez sont statut pour « accès restreint », valider, vous devriez obtenir ça :

Puis vous allez visiter le site et cliquer sur la rubrique « plats mijotés »

et là, vous allez avoir une déception car on ne vous a pas barré le passage... :==(

C’est normal, vous êtes encore loggé comme administrateur.
Commencez par vous déconnecter.

et revenez au site public pour réessayer.

Là, vous devriez obtenir ceci :

Revenez au site public sans chercher à vous connecter
et essayez de lire l’article « Daube »...

Même résultat.... Quand on protège une rubrique, on protège aussi les articles qu’elle contient.

Création des visiteurs

Pour les exemples qui vont suivre, on remettra la rubrique « plats mijotés » en accès public, et on mettra la rubrique « cuisine » en accès restreint. On peut constater alors que plus aucun élément du site n’est accessible.

Spip accepte maintenat 4 statuts
-  Les administrateurs
-  les administrateurs restreints
-  les rédacteurs
-  Les visiteurs

Ces derniers ne peuvent être créés que si au moins un article dans le site a ses forums réglés en abonnement. Nous allons donc paramétrer l’article « Daube » de cette façon.

Puis nous allons créer un auteur que l’on appellera « bocuse ». Pour nous simplifier la tâche, on lui donnera le même login et le même mot de passe. On n’oubliera pas de régler son statut à « visiteur », on renseignera le champ « liste des rubriques.... » en rentrant « 2 » qui est l’id de la rubrique « plats mijotés ».

Apres vous être déconnectés, essayez de vous placer sur la rubrique « plats mijotés » en entant
pour login « bocuse » et pour mot de passe « bocuse ».

Ca marche !! Et si vous essayez avec cette connection d’aller sur la rubrique « cuisine » ou sur la rubrique « entrées chaudes », on vous annonce que vous n’avez pas les droits suffisants.

On va donc créer le visiteur « superbocuse » de la même manière que le précedent, mais on renseignera le champ
« liste des rub... » à « 1 ». Vous l’avez compris, « superbocuse » aura le droit de visiter tout le site.

Remarque sur les sessions sous spip

Je ne connais pas l’implémentation des sessions sous spip mais il semble qu’après de nombreuses connexions-déconnexions, et changements d’identité, le mécanisme présenté plus haut aie tendance à demander plus qu’il ne le faudrait à l’utilisateur de se réidentifier.... Il vaut mieux que le défaut aille dans ce sens que dans l’autre. Donc ne pas hésiter à réessayer si vous n’arrivez pas à vous connecter la première fois.

Adapter ceci à tous vos squelettes

Dans votre article.html recopiez en début de fichier la même ligne que dans article-dist.html. Faites la même chose avec rubrique.html et rubrique-dist.html.

Quelques explications pour les développeurs

Ce sont les squelettes « controle_acces_rubrique.html » et « controle_acces_article.html » qui contrôlent l’entrée de l’article ou de la rubrique.

Dans les deux cas le principe est simple :

-  Une boucle hiérarchie parcourt la liste des rubriques, de la rubrique, ou de l’article en cours, jusqu’à la racine. Si pendant ce parcours, une des rubriques a son extra « acces » égale à « restreint », alors le drapeau « $restriction » passe à « true ».
-  Si « $restriction » vaut true alors on vérifie si le visiteur est loggé.
-  Si le visiteur est loggé, la fonction « a_le_droit(...) » récupère l’extra associé à cet auteur (grâce à une fonction de beatnick), et vérifie si dans la hiérarchie citée précédemment l’auteur a le droit de visiter une de ces rubriques, si c’est le cas on le laisse lire la rubrique ou l’article.

N’hésitez pas à me faire remonter les bugs, qui seront, j’en suis certain nombreux....


Une mise à jour de cet article pour la version 1.8 de SPIP est disponible ici : MAJ 1.8 de l’article « Gestion hiérachisée des accès restreints »

Un peu stupidement j’ai oublié id_groupe=20 dans l’appel d’un squelette, en rapport avec une autre contrib donc on s’affolle pas, on l’ignore et ça marche pareil.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom