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

9 discussions

  • 1

    bonjour
    je suis en 1.7.2 et l’accès restreint ne s’effectue pas pour la rubrique voulue

    à quoi ceci est il dut ?

    merci

    Répondre à ce message

  • J’utilise cet contrib sur notre site intranet et ca marche tres bien.

    Seul probleme : Meme si le repertoire /IMG est protege par htaccess il est toujours possible d’acceder aux fichiers (documents) qui se trouvent dans une page avec acces protege. Bien sur il faut connaitre le nom du fichier. Quelqu’un aurait trouve une astuce pour eviter ceci ? Merci !

    Répondre à ce message

  • bonjour,

    j’ai mis en œuvre cette option - le résultat est à moitié atteint ;-)
    en effet, si mes rubriques contiennent bien la mention acces restreint ou public - il n’ y a pas de statut de visiteur chez les rédacteurs - et donc pas de restriction d’acces - version 1.7.2

    que faire ???

    J Marc

    tiens au fait, si quelqu’un peut me dire quel est le squelette du site usma.fr dont je reprends la gestion ...

    merci d’avance

    Répondre à ce message

  • merci ça marche tres bien

    mais je veux savoir un truc j’ai met un menu avec les titres des rubriques comme lien et est ce que c’est possible de ne pas afficher les titres du rubriques qui ont un accès restreint
    que si la personne s’identifie (aussi afficher pour chaque personne ses propres rubriques)

    merci de votre aide

    Répondre à ce message

  • Attention, les articles sont toujours visibles (en résumé) sur certaines pages dont surtout le plan du site.
    Il faut donc modifier les boucles pour ne pas afficher les rubriques (et les articles qui sont dessous) :

    <?php if ('[(#EXTRA|extra{acces})]'!='restreint') { ?>

    Ici les boucles d’affichage autorisées

    <? } ?>

    Répondre à ce message

  • 1

    Merci pour cette contrib. Je l’ai applique a notre site Intranet.
    Le seul probleme a ete le cache. Apres fermer IE vous pouviez toujours avoir acces a la page a nouveau sans taper le login+password.
    Il a fallu que je change $delais=0 partout et ca marche !
    CC (England)

    • J’ai oublie de preciser que j’ai fait une copie du programme pour controler les breves egalement. Si vous voulez une copie veuillez svp indiquer votre e-mail.

    Répondre à ce message

  • Bonjour,
    Merci pour ce topo adapté à mon niveau débutant (en php). Ca marche nickel sur SPIP 1.8. Je cherche le moyen de l’adapter à la rubrique particulière agenda . Quelqu’un aurait-il une solution à me proposer SVP ?
    Merci.

    Répondre à ce message

  • 5

    La MAJ pour la 1.8 est ici

    Si elle est publiée bien sur.

    • Merci Michaël pour ces contribs !

      • ces mises à jour des interfaces de gestion des extra, et des accès restreints par ces contribs me sont très utiles :

      Pourquoi laisser tomber les champs extra ?

    • Pierre Bénech

      Bonjour,

      Où peut on trouver les MAJ pour la version 1.8 de l’article « Gestion hiérarchisée des accès restreints » ?

      Merci par avance

    • Bonjour,

      Fonctionne-t-elle sur le dernier spip 1.8.1 ?

      Merci par avance

    • Bonjour,

      Tout d’abord un grand merci pour ce travail. Je débute sous spip en construisant un site avec spip 1,8,1, ta contrib et bones 1,8 comme squelette. J’ai pu faire fonctionner le controle des accès mais depuis la mise à jour de bones il y a 2 jours j’ai dû écraser quelque chose et je ne trouve plus quoi. Pourrais-tu indiquer comment adapter ta contrib aux autres squelettes, puisque les fichiers « *-dist.html » que tu mentionnes ont disparu (en précisant si possible quelle est cette ligne qu’il faut ajouter à nos fichiers). Désolé si mes questions paraissent lourdingues ou si elles n’ont pas lieu d’être !

    • Bon, d’accord, c’était une question con. Disons qu’en utilisant un bon éditeur html tout devient plus clair...

    Répondre à ce message

  • 9

    Cette contribution marche très bien avec la version 1.7.2.
    Pourquoi l’avoir refusé ?
    Même si elle n’est pas compatible avec la 1.7 voire la 1.8 elle mériterait d’être intégrée dans SPIP moyennant les améliorations/modifications necessaires.

    • Tout simplement parce qu’elle utilise (fort bien) les champs extra, qui on été introduits dans SPIP 1.7.1 (je crois) et qui ne sont pas destinés à ’survivre’ en l’état à SPIP 1.8. Donc dans quelques mois, elle posera plus de problème qu’elle n’en résoudra.

    • Absolument d’accord, c’est aussi pour cela que j’ai renoncé à l’entretien de cette contrib quoiqu’elle me rende encore quelques services....

      J’ai beaucoup plus confiance (avec l’arrivée de la 1.8) en la possibilités de définir dans le langage des boucles lui-même la notion de session qu’à le bricoler comme je l’ai fait.

      Quand la 1.8 sortira officiellement je proposerai coup sur coup deux contributions (enfin j’espère y arriver). Une contribution qui permet d’ajouter un mot clé à un auteur et une contribution sur les sessions, c’est la combinaisons de ces deux outils qui permettront de définir des règles de navigations adaptés a l’auteur de la session.

    • Dieudonné

      Merci encore pour cette magnifique contrib qui m’a permis à la fois :
      -  de mieux comprendre le fonctionnement des extra
      -  de me permettre d’imaginer enrichir assez facilement le fonctionnement de base de SPIP
      -  et de gérer des accès restreints assez facilement !

      Je suis passé à la 1.8b6 en particulier pour sa fonction d’enregistrement de l’historique de modification des articles - ce qui au passage offre la richesse de faciliter le travail à plusieurs sur un article - et je voudrais, malgré les réserves énoncés quant au fonctionnement de cette contrib pour la 1.8, signaler un bug :
      -  cette contrib semble toujours fonctionner, à l’exception des Champs de saisie type Bouton radio ou Liste select.

      Merci d’avance pour l’adaptation de cette contrib à la 1.8 !!!

    • Cette contrib ne sera adaptée à la 1.8 qu’à la sortie officielle de celle-ci.

      Cordialement.

    • Hello !

      Tu penses qu’ils serait possible pour la futur adaptation à la 1.8 de pouvoir aussi restreindre l’accès à certains rédacteurs à certaines rubriques dans l’espace privé ?

      J’ai des rédacteurs qui ne devraient pas avoir accès à certains documents (documents confidenciels) qui, même avec ta contrib, pouraient passer par l’espace privé pour y accéder.

      Merci

      Vincos

    • > Non car c’est une modification du noyau.

      Ca entrainerait un refus automatique de la contrib, et c’est contraire aux principe de transparence dans ce cms.

    • Dieudonné

      Une idée du délai pour cette adaptation ?

      Je ne suis pas très doué en php, mais je me propose d’aider à bêta-tester en cas de besoin ;)

    • SPIP 1.8 est sorti. Quoi de neuf pour cette contrib, qui m’a l’air de correspondre tout à fait à ce que je recherche ? Ca marche avec la 1.8 ?

      Merci !

    • ivandps

      Tout d’abord bravo aux contributeurs, particulièrement toi Courcy.

      Dommage, je cherche depuis longtemps cette contribe, mais qui soit également adaptée au site privé !

      Je crois ne pas être le seul !

      Merci pour ton travail.

    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 :

  • 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