Comment restreindre l’accès d’un article ou d’une rubrique dans l’interface publique par le statut.

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

Cette contrib vous permet de limiter la visibilité de plusieurs pages de votre site aux seules personnes identifiées, que ce soit par leur statut
-  de visiteur
-  de rédacteur
-  d’administrateur.

Si un internaute accède à une page publique protégée, il sera invité à s’identifier par son login et son mot de passe. Une fois fait, s’il a le statut minimum requis, il accèdera directement à la page demandée.

Modifications requises

Les modifications requises sont mineures et peuvent facilement être appliquées à votre site.

Elles sont sans danger et peuvent tout aussi facilement être supprimées en tout temps.

Procédures

-  Assurez-vous que vous n’avez pas déjà des fichiers portant les noms :

  • rubrique_statut.html
  • article_statut.html
  • login_public.php3
  • login_public.html
  • rubrique_ok.php3
  • article_ok.php3

-  Téléchargez, décompressez et déposez à la racine de votre site les fichiers qui sont contenus dans ce document.

Réserver

-  Modifiez le fichier rubrique.php3 :
Changez la valeur de $fond :

//$fond = "rubrique";
$fond = "rubrique_statut";

-  Modifiez le fichier article.php3 :
Changez la valeur de $fond :

//$fond = "article";
$fond = "article_statut";

-  Créez un nouveau groupe de mots-clé appelé Accessibilité
-  À la question Les mots-clés de ce groupe peuvent être associés, cochez pour cet exercice aux rubriques
 [1]

-  Créez dans ce groupe les mots-clés les mots :

  • Administrateur
  • Rédacteur
  • Visiteur

Utilisation

Ajoutez le mot clé Administrateur, Rédacteur ou Visiteur pour limiter l’accès public d’une rubrique ou d’un article.

Explication

Prenons par exemple le cas d’une rubrique réservée :
le fichier rubrique.php3 n’appellera plus directement comme squelette le fichier rubrique.html mais plutôt le squelette contenu dans le fichier rubrique_statut.html.

Ce squelette n’affiche rien, il permet simplement de vérifier si la rubrique est limitée en accès public. Et si oui, de vérifier si l’internaute s’est identifié par son login et son mot de passe. Après, il vérifie s’il a le statut minimum requis. [2]

Une fois cette vérification faite, on affichera la rubrique telle que prévue par votre squelette rubrique.html

Les seuls fichiers vraiment nouveaux sont rubrique_statut.html :

<BOUCLE_accessibilite(MOTS){id_rubrique}{type=Accessibilité}>
                <BOUCLE_a(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Administrateur}>
                        <?
                        if ($auteur_session['statut']!='0minirezo'){
                        ?>
                        <INCLURE(login_public.php3){id_rubrique}>
                        <?
                        }
                        else {
                        ?>
                        <INCLURE(rubrique_ok.php3){id_rubrique}>
                        <?
                        }
                        ?>
                </BOUCLE_a>
                <BOUCLE_b(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Rédacteur}>
                        <?
                        if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                        ?>
                        <INCLURE(login_public.php3){id_rubrique}>
                        <?
                        }
                        else {
                        ?>
                        <INCLURE(rubrique_ok.php3){id_rubrique}>
                        <?
                        }
                        ?>
                </BOUCLE_b>
                <BOUCLE_c(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Visiteur}{lang_select=non}>
                        <?
                        if ($auteur_session['statut']!='6forum'&&$auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                        ?>
                        <INCLURE(login_public.php3){id_rubrique}>
                        <?
                        }
                        else {
                        ?>
                        <INCLURE(rubrique_ok.php3){id_rubrique}>
                        <?
                        }
                        ?>
                </BOUCLE_c>
        </BOUCLE_accessibilite>
<INCLURE(rubrique_ok.php3){id_rubrique}>
<//B_accessibilite>

et

article_statut.html :

<BOUCLE_accessibilite(MOTS){id_article}{type=Accessibilité}>
                <BOUCLE_a(ARTICLES){id_article}{id_mot}{titre_mot=Administrateur}>
                        <?
                        if ($auteur_session['statut']!='0minirezo'){
                        ?>
                        <INCLURE(login_public.php3){id_article}>
                        <?
                        }
                        else {
                        ?>
                        <INCLURE(article_ok.php3){id_article}>
                        <?
                        }
                        ?>
                </BOUCLE_a>
                <BOUCLE_b(ARTICLES){id_article}{id_mot}{titre_mot=Rédacteur}>
                        <?
                        if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                        ?>
                        <INCLURE(login_public.php3){id_article}>
                        <?
                        }
                        else {
                        ?>
                        <INCLURE(article_ok.php3){id_article}>
                        <?
                        }
                        ?>
                </BOUCLE_b>
                <BOUCLE_c(ARTICLES){id_article}{id_mot}{titre_mot=Visiteur}{lang_select=non}>
                        <?
                        if ($auteur_session['statut']!='6forum'&&$auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                        ?>
                        <INCLURE(login_public.php3){id_article}>
                        <?
                        }
                        else {
                        ?>
                        <INCLURE(article_ok.php3){id_article}>
                        <?
                        }
                        ?>
                </BOUCLE_c>
        </BOUCLE_accessibilite>
<INCLURE(article_ok.php3){id_article}>
<//B_accessibilite>

Pour simplifier cette contrib, le fichier login_public.html est simplement le fichier login.html standard de SPIP où on a remplacé le formulaire privé (#LOGIN_PRIVE) en formulaire public (#LOGIN_PUBLIC). À la différence qu’une fois identifié, l’internaute ayant le statut minimum requis verra s’afficher la rubrique ou l’article demandé et non l’interface privée.

Nous avons également conservé, pour simplifier, les mêmes noms de fichiers pour ce qui est des fichiers rubrique_ok.php3, rubrique_ok.html et article_ok.php3, article_ok.html. Mais cela n’est pas recommandé, car on donne accès aux squelettes et nous ouvrons la porte à des chemins de contournements possibles.

Pour renforcer la sécurité, on doit changer les noms des deux fichiers rubrique_ok.php3 et article_ok.php3 pour des noms de votre choix et modifier les fichiers rubrique_statut.html et article_statut.html en conséquence.

On peut changer également les noms des fichiers rubrique_ok.html et article_ok.html et modifier en conséquence les fichiers rubrique_ok.php3 et article_ok.php3. Cela complique la vie aux intrus qui voudraient contourner la limitation d’accès.

Exemple

On ajoute simplement une extension numérique au hasard à notre fichier [3] :

-  Changer le nom du fichier rubrique_ok.html ou rubrique_ok_5943.html
-  Modifier le fichier rubrique_ok.php3 (ou l’équivalent selon le nom que vous lui aurez donné)
//$fond = ’rubrique_ok’ ;
$fond = ’rubrique_ok_5943’ ;

Il faut aussi se méfier des fichiers appelés par des INCLURE. Si on donne accès au squelette, on donne aussi le nom de ces fichiers. Et si on donne le nom d’une inclusion qui appelle une partie cachée de l’article, on donne ainsi la possibilité d’appeler directement cette inclusion.

Personnellement, j’utilise même une variable de session qui protège ces pages si elles ne sont pas appelées par rubrique.php3 et article.php3 ainsi que les fichiers appelés par INCLURE. Cela pourrait faire l’objet d’une autre contrib.

Modifications additionnelles

Cette contrib est une simplification d’une utilisation plus complexe que nous faisons sur plusieurs sites de l’accès limités à l’interface publique.

Sur plusieurs d’entres eux, les articles, les rubriques, les brèves et même les sites référencés portant un des mots-clés du groupe Accessibilité n’apparaissent dans aucun menu du site lorsqu’on a pas le statut requis. Une fois identifié, les divers menus s’enrichissent.

Cela permet d’éviter la frustration de se voir refuser l’accès à une page alors qu’on nous l’offre dans le menu ou le plan du site. [4]

Cela devrait faire l’objet d’une autre contrib.

Voir Comment gérer les rubriques réservées

Notes

[1Sur plusieurs sites, j’utilise ce groupe de mots-clés pour les quatre options possibles.

[2Les bidouilleurs pourront ajouter un message de leur cru pour avertir l’internaute qui se sera identifié et qui n’aura pas le statut requis qu’il ne peut visualiser cette page, et ne plus afficher le formulaire.

[3En conservant le même nom suivi d’une extension, on facilite la gestion des fichiers qui se retrouvent souvent classés par ordre alphabétique dans des outils comme Dreamweaver ou autre.

[4Il faut aussi penser à modifier les fichiers backend.php3 si on ne veut pas que les rubriques ou les articles non accessibles y soient listés.

Discussion

26 discussions

  • 13
    c.cormier

    Bonjour
    Excellente contribution. Je l’utilise sur plusieurs sites. Quand sera publiée la suite, c’est dire la possibilité de cacher les rubriques et articles dans les menus quand le statut du visiteur ne permet pas d’y accéder.
    Cordialement

    • Oui, ça prendrait une autre contrib complémentaire. En fait, les deux étapes suivantes que je vais documenter sont « Comment ne pas afficher dans les différentes menu et dans le plan du site les articles et rubriques non accessible au visiteurs. »
      Et « Comment restreindre l’accès d’un article ou d’une rubrique dans l’interface privée par le statut. » Ce qui est très simple mais qui demande d’ajouter quelques lignes de code dans quelques fichiers du coeur de SPIP.

      C’est pour bientôt.

    • « Comment restreindre l’accès d’un article ou d’une rubrique dans l’interface privée par le statut. »

      AAAARRRGGGHHHH ! je suis impatient de voir cette contrib. vu la qualité de la précédente... chapeau bas et tapis rouge !

      Reste que je crois comprendre qu’elle demandera de toucher au coeur de SPIP, et de fait, risque de ne pas être « compatible » avec les évolutions de SPIP. Est-ce que j’ai bien lu ?

    • Il n’y aura pas de problème avec les nouvelles évolutions de SPIP. On n’ajoutera simplement une condition tester par fonction dans le coeur de certaines pages de l’interface privée pour savoir si l’internaute aura un droit de regard ou non à certaines rubriques ou articles.

      À moins que le système de pluggin offre une porte d’entrée à l’endroit désiré (ce dont je doute. Je n’ai pas suivi en détail ce sujet.) ces modifications éventuelles au coeur de SPIP, bien que mineurs, devront être reportées dans les fichers des prochaines versions. Mais, je le souligne à nouveau, elles seront très simples ces modifications...

      J’utilise déjà ces tests pour gérer des groupes d’accès à certaines rubriques et leurs articles dans l’interface privée !

    • J’utilise déjà ces tests pour gérer des groupes d’accès à certaines rubriques et leurs articles dans l’interface privée !

      Voici donc le coeur de mon « problème », car cette fonctionnalité manque cruellement dans SPIP au niveau de la gestion des auteurs.

      Ces tests permettent-ils d’offir par la suite la fonctionnalité suivante :
      -  accéder et intervenir uniquement sur certaines rubriques et/ou articles dans l’espace privé en fonction du statut de l’auteur et de son appartenance à un groupe X ou Y ?

      Ainsi, les auteurs techniques n’auraient aucun regard sur les rubriques et articles des auteurs juridiques, et vice versa...

      Dans ce « post », j’exprime mon besoin auquel tu sembles avoir déjà une solution, si je ne m’abuse :)

    • Voici donc le coeur de mon « problème », car cette fonctionnalité manque cruellement dans SPIP au niveau de la gestion des auteurs.

      C’est une question de « philosophie » semble-t-il... SPIP a beaucoup évolué depuis ses origines. Il ne sert plus seulement de système collaboratif de rédaction pour un Webzine.

      De permettre la gestion des droites d’accès est un besoin que certains ont, d’autres ne l’ont pas. Pour beaucoup d’option, SPIP se veut flexible, permettant à ceux qui ont un besoin, d’activer une option et à l’autre, de la désactiver.

      Pourquoi ne pas offrir en standard la possibilité de gestion des droites d’accès dans l’interface privée ?

      Il faut leurs demander...

      accéder et intervenir uniquement sur certaines rubriques et/ou articles dans l’espace privé en fonction du statut de l’auteur et de son appartenance à un groupe X ou Y ?

      Bon... Là tu as compris où on va en venir. Mais ce ne sera pas dans cette contrib.
      Je gère actuellement des groupes dans l’interface privée. J’ai beaucoup modifié une contrib existante pour ce faire (voir : Créer des groupes, limiter l’accès aux rubriques et aux articles...). Je n’ai pas encore d’exemple en ligne du résultat. Je teste en local pour le moment.

    • Je crois que nous sommes sur la même longueur d’onde quand à la philosophie de SPIP. Je ne tiens en aucun cas à lancer une polémique sur l’intérêt de telle ou telle orientation de SPIP et de ses développements. Qui suis-je pour juger et à partir de quelles lois (très philosophique cette question :) ?

      Je suis allé voir la contrib. dont tu parles... Une approche très intéressante de mon point de vue. A lire entre les lignes, il ne « manque plus grand chose », enfin façon de parler :)

      Si je peux t’aider à tester, c’est avec plaisir. Autrement tiens moi informé, s’il-te-plait, d’une éventuelle date du livrable en version beta (c’est comme ça qu’on dit :))

    • C’est noté !

    • bonjour,

      j’ai transféré les fichiers, mais il y a un fichier svn.revision et j’en ai déjà un qui ne contient pas la même chose à la racine... dois-je l’écraser ? copier le contenu à l’intérieur de celui déjà existant ?

      Merci.

    • Non, tu n’as pas besoin de conserver ce fichier.

    • ah merci beaucoup pour la réponse car je galère depuis l’autre jour avec cette histoire de restreindre l’accès aux pages... de plus, quand je dézippe, il me manque des fichiers rubrique.php3, article.php3, sinon je les trouve dans dist ou écrire, je sais plus, mais il n’y a pas cette fameuse variable $fond... donc je suis bien perdue là... alors je vais suivre ton tuto, je viens de jeter un oeil vite fait, et il a l’air beaucoup plus complet, merci mille fois !!!

      pour info, j’essai de restreindre une partie du site (en construction) (voir le lien) où des élèves poseraient leurs vidéos, mais certaines doivent absolument avoir un accès privé. Sinon je vais être obligée de faire un répertoire en dehors de spip avec htaccess normal, mais bon, j’aimerais bien rester dans la même architecture quand-même et puis ça m’intéresse de toutes façons de savoir le faire dans spip. J’ai vu que beaucoup de personnes d’ailleurs posent la même question sur un autre post, restée sans réponse.

    • yesssss ! ça marche ! j’ai suivi ton tuto, il est super clair, simple efficace et surtout ça marche ! merci mille fois, par contre j’ai voulu poster pour dire merci sur ton post, ça ne l’a pas ajouté... donc je te dis merci ici. ;-)

      Voir la page cachée (bon jeme suis pas encore occupée du css... ca va viendre)...

    • Bonjour,
      J’utilise Spip 1.9.2 avec le plugin alternative comme squelette. J’ai utiliser le fichiers dans le zip, et j’ai modifé les fichier rubrique_ok.php3 et article_ok.php3, mais cela ne semble pas marcher.
      Qu’est-ce que j’ai publié de faire ?

    • La version ici est peut-être plus à jour : http://monsitespip.com/spip.php?article4.

    Répondre à ce message

  • 1
    Mick’

    Bonjour,
    J’utilise cette contrib, et effectivement, lorsque j’ai restreint un article avec le mot clé « Visiteur » je tombe sur une demande de connection. Par contre, je ne parviens pas à trouver le moyen de renseigner les droits pour un visiteur. Si j’ajoute un nouvel auteur, je n’ai la possibilité qu’Administrateur, Redacteur ou poubelle.
    Pouvez vous m’aider ?
    Merci d’avance.
    MB

    • C’est un classique ! Spip n’affiche pas toujours cette possibilité. Il y a un autre message dans cette page qui en parle...

    Répondre à ce message

  • 2

    Merci pour cette contrib.

    Mais chez moi ça ne marche qu’avec « administrateurs », embêtant. Dès que je mets rédacteurs et visiteurs, ça me mets une page blanche en ligne au lieu de me demander un login... J’ai rien vu à ce sujet dans la liste des réponses. Avez vous une solution ?

    Merci d’avance

    • Vérifie tes mots-clés ! Si tu n’as pas écrit « Administrateur », « Rédacteur » et « Visiteur » tel quel, au singulier (tu me parles de « administrateurs » avec un « s »). S’il y a la moindre différence, les squelettes contenus dans les fichiers rubrique_statut.html et article_statut.html trouveront bien un mot-clé du groupe Accessibilité mais ne retournera rien.

    • Ok merci, j’avais effectivement écrit le mot différemment...

      Ca marche parfaitement !

      Elsey

    Répondre à ce message

  • 10

    Bonjour,

    Cette contrib correspond à ce que je recherchais.
    En plus, elle marche (en local) sans difficulté, alors que je ne suis absolument pas programmeur. MERCI !

    J’aimerais maintenant que les rubriques ou articles ainsi protégés soient signalés par une petite icône. C’est possible ? Comment m’y prendre ?

    • Oui c’est possible !

      Personnellement, j’utilise déjà un filtre qui me permet d’afficher ou non les titres dans les menus selon leur accessibilité pour l’internaute.

      Je viens de faire des tests afin de l’utiliser pour afficher une petite icône comme tu le souhaites.

      Selon qu’on utilise la version 1.9 ou une des autres, il y aura quelques différences...

      Je te reviens avec de l’info (un article) sur le sujet d’ici peu !

    • Ben dis donc, ils sont sympas les spipeurs (ou spipistes ?) !
      Merci de cette rapide réponse.
      J’attends avec impatience ton article.

    • En bon débutant, je dois essayer trop de choses à la fois.
      Je me débats avec les squelettes, les boucles, les balises...
      Faudrait pourtant que j’aie fini pour le 28 août !
      Sans compter la difficulté de vérifier : vider le cache, supprimer les fichiers temporaires et les cookies.

      J’en viens donc à ma question : les articles « protégés » semblent ne plus l’être en cas de « redirection ». Ai-je fait une mauvaise « manip » ? Peut-on remédier à cela ?

      Merci d’avance, Philippe

    • As-tu bien protégé l’article cible ? Si tu as protégé l’article que tu redirige, c’est normal.

      Lorsque tu utilisera le filtre dont je te parlais pour indiquer les articles protégé, tu pourra protéger les deux pour que les différents menus indique que ce lien pointe sur un article protégé.

      Sinon, il faut protéger seulement l’article ciblé par la redirection et non celui qui redirige.

    • OK.
      Je crois que j’ai bien compris.

      Seul petit souci, la redirection va vers une adresse qui n’est pas sous spip.
      Mais vers un dossier (un petit annuaire) protégé par .htaccess.
      Que j’espérais rapatrier sur le site principal afin d’éviter à mes « visiteurs autorisés » de re-saisir leurs identifiants.

      Tant pis.
      Tout le reste me convient parfaitement.
      En attendant la petite icône signifiant l’accès restreint...

      Merci !

    • bonjour
      excusez l’intrusion d’un débutant ( le mot est faible ).
      j’essaie d’appliquer la contrib de base pour un site d’école sous éva-spip ( simplement créer une rubrique privé par un mot de passe ) ; mais dans la partie :

      Modifiez le fichier rubrique.php3 :
      Changez la valeur de $fond :

      //$fond = « rubrique » ;
      $fond = « rubrique_statut » ;

      Modifiez le fichier article.php3 :
      Changez la valeur de $fond :

      //$fond = « article » ;
      $fond = « article_statut » ;

      faut-il remplacer tout le fichier ou rajouter ces lignes de code ( mais où alors ? et à la place de quoi ? ) .

      merci de répondre à un vieux galérien qui commence à attaquer la falaise !

      françois

    • Bonjour,

      Comme tu le retrouveras dans le dossier zippé et que tu peux télécharger plus haut et décompresser, tu changes le fond appellé par ton fichier rubrique.php3 pour qu’il appelle le fichier rubrique_statut.html. Et le fichier rubrique_ok.php3 appellera, lui, ton squelette situé actuellement dans ton fichier rubrique.html.

      On ne fait qu’un petit détour qui nous permet de filtrer ceux qui peuvent ou non voir la rubrique.

      Même chose pour l’article.

      La version de cette contrib pour spip 1.9 que je suis à finaliser a pris une cure d’amaigrissement : encore beaucoup plus simple ! À venir bientôt...

    • Bienvenue au club !

      Pas évident de débuter en autodidacte dans ces fichus codes, qui varient entre le PHP, le HTML (et les CSS) et les boucles Spip !!!

      Si tu n’as pas trouvé :
      -  tu ouvres article.php3 avec un éditeur (le bloc-notes suffit).
      (Il est à la racine du site, pas dans le dossier squelettes).
      -  Tu lis alors entre les balises php :

      $fond = « article » ;

      $delais = 24 * 3600 ;

      include (« inc-public.php3 ») ;

      -  Tu ajoutes alors // devant $fond, ce qui le transforme en commentaire, donc sans action dans le script.
      -  Puis une ligne en-dessous : $fond = « article_statut » ;

      Soit :

      //$fond = « article » ;

      $fond = « article_statut » ;

      $delais = 24 * 3600 ;

      include (« inc-public.php3 ») ;

      -  Tu sauvegardes. Tu fais pareil avec rubrique.php3. Et le tour est joué.
      Ca marche super ! Merci à Iago de nous faire profiter de ses compétences.

      Bon courage pour la suite.

    • Pas évident de débuter... Non, je ne m’en souviens que trop !
      Bien que je patoge dans Spip depuis plusieurs années, je n’ai pas oublié ces doux moments ;-).

      C’est pourquoi, un de mes objectifs à travres mes quelques contribs reste d’être, dans la mesure du possible, abordable pour un néophyte

      Merci donc de m’aider à améliorer les explications et n’hésitez pas à me faire des commentaires pour la version 1.9 sur laquelle je travail en se moment.

      ps. La fonction utiliser pour la 1.9 pourrait être utilisé aussi pour la 1.8.3. Je vais probablement en faire la démonstration bientôt sur mon nouveau site de travail Mon Site Spip 1.9

    • de retour ;
      merci ;
      non , c’est pas évident ( bill gates jouait aux petites voitures dans son garage quand j’étais au lycée ) mais un site c’est vraiment génial pour les élèves, donc je m’accroche même si je suis bouché comme me le dit un copain ( plus jeune ) à l’école ( il parait que l’on perd 200 000 neurones par jour après 20 ans )
      françois

    Répondre à ce message

  • Pour la version 1.9 de SPIP, j’ai publié une nouvelle version de cette contrib.

    Répondre à ce message

  • 3

    super contribution

    ca marche tres bien chez moi pour le public mais la question est la
    la version 1.9 arrive a grand pas
    ou peut on avoir une variante pour ce genre de restriction

    • Suivi oblige, je vais bien devoir me coltiner sa conversion en 1.9 d’ici peu en effet !

      À suivre...

    • Salut, c’est encore moi !peux me dire pourquoi le code que tu m’avais donné rest grisé ? je suis toujours en local pour l’instant ça ne gêne pas ?

      ma question c’était que je voulais faire un accés restreint sur un article (1er sens du terme dans spip) où on demanderait le login et le mot de passe pour entrer.

      Merci

      Aurélie

    • Salut Aurélie,

      Je suis un peu confus. Peux-tu m’écrire directement par email pour me redonner plus de détails. Je pourrai mieux t’aider en privée : francois.vachon@iago.ca

    Répondre à ce message

  • 1

    Bonjour.

    Je cherche à faire pour mon site un lien se connecter. En me basant sur cette contrib celà me donne une fois connecter un lien qui normalement renvoie sur l’url du site or le lien me renvoie sur la page login_public donc je tourne en rond.
    Au final, je veux arriver à ce qu’une fois connecté on est accès au menu suivant notre statut. Exemple un visiteur authentifié aura accès une rubrique que le simple visiteur ne verra pas dans le menu.

    Si quelqu’un pouvait m’éclairer.
    Merci d’avance.

    • Je cherchais la même chose et j’ai bricolé une solution qui fonctionne. Rien de très pro, j’ai découvert SPIP et le PHP il y a 10 jours.

      Prérequis et limitations : situation simple, pour moi n’existent que des rédacteurs et le public.
      Cette solution suppose de dupliquer tous les squelettes rubrique, article, sommaire... donc faut pas que le site soit trop complexe.

      Tout est basé sur la contrib de base : par exemple pour les rubriques, je créé un fichier Rubrique_pub.html (pour public) dans lequel je mets des filtres dans les boucles à partir des mots clef
      exemple :

      <BOUCLE_article-numerotes(ARTICLES) {id_rubrique{{}{titre_mot!="Redacteur"}{}}par num titre}>

      «  != » veut dire « différent », « redacteur » est mon mot clef. donc la boucle n’affichera pas les articles réservés aux Redacteurs et admins.

      Je crée un fichier rubrique_pub.php3 qui pointe vers rubrique_pub

      <?php
      $fond = "rubrique_pub";
      $delais = 2 * 3600;
      include ("inc-public.php3");
      ?>

      Ensuite petite modification du fichier rubrique statut.html pour qu’il envoie vers la zone public ou privée selon le statut :

      <BOUCLE_accessibilite(MOTS){id_rubrique}{type=Accessibilite}>
                      <BOUCLE_a(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Publique}>
                              
                              <INCLURE(rubrique_pub.php3){id_rubrique}>
                              
                      </BOUCLE_a>
                      <BOUCLE_b(RUBRIQUES){id_rubrique}{id_mot}{titre_mot=Redacteur}>
                              <?
                              if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                              ?>
                              <INCLURE(login_public.php3){id_rubrique}>
                              <?
                              }
                              else {
                              ?>
                              <INCLURE(rubrique_ok.php3){id_rubrique}>
                              <?
                              }
                              ?>
                      </BOUCLE_b>
                      
              </BOUCLE_accessibilite>
      <{{INCLURE(rubrique_pub.php3){id_rubrique}>}}
      <//B_accessibilite>

      Idem avec les fichiers articles

      reste le problème du sommaire que tu soulèves.
      Je crée un sommaire_pub.php3 qui pointe vers un fichier sommaire_pub.html qui contient les filtres dans les boucles
      Index.php3 pointe vers sommaire_pub.php3
      Dans sommaire_pub.html un bouton invite à se connecter :

              <a class="bouton" href="#URL_SITE_SPIP/sommaire.php3">Accès adherents</a>

      Ce fichier sommaire.php3 est modifié pour pointer vers un fichier sommaire_statut.html qui comprend ce code :

      <?
                              if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                              ?>
                              <INCLURE(login_public.php3){sommaire}>
                              <?
                              }
                              else {
                              ?>
                              <INCLURE(sommaire_ok.php3)>
                              <?
                              }
                              ?>

      Si la personne n’est pas connectée, login_public est invoqué et après connection, il renvoie sur la page sommaire.html
      Dans sommaire.html, pas de filtre et le bouton devient :

      <a class="bouton" href="#URL_LOGOUT">Deconnexion</a> 

      , il renvoie donc sur Login_public.html ce qui permet de se deconnecter.

      Idem pour le plan du site et autres

      ça parait un peu compliqué, mais ce n’est qu’un developpement de la contrib de base et le resultat sur mon site est nickel, le visiteur voit un bouton se connecter qui l’envoie sur la boite de connexion qui le renvoie direct sur la page full ou il retrouve une autre mise en page et un bouton « se deconnecter »

    Répondre à ce message

  • 3

    Merci à Iago pour cette contrib qui me simplifie bien le boulot.

    Par contre je dedouble les squelettes pour ne pas que les visiteurs aient le sentiment d’être environnés de portes fermées.

    Reste un problème qui est celui du sommaire. j’ai 2 squelettes « sommaire », un full et l’autre filtré. Comment passer proprement du filtré vers le Full via une vérification de droit et eventuellement boite de connexion ?

    J’ai essayé l’entête en PHP décrite plus bas, mais en l’absence d’ID_rubrique, après connexion la boite de connexion reste plantée avec comme seule ressource le retour à l’accueil.. qui est le sommaire publique que l’on voulait quitter.
    Et j’imagine que je vais avoir les mêmes difficultés avec le plan..

    Comment sont repérés dans SPIP ces éléments ?
    Merci de vos avis éclairés

    Denis

    • Je précise ce que je cherche car je ne suis peut-être pas bien clair ; l’idéal serait :

      1 / Index.php3 ou sommaire.php3 capable de filtrer les visiteurs déjà enregistrés (précédente session) et de les envoyer vers le bon sommaire (Filtré ou Full)

      2/ Un bout de code comme décrit + bas en tête du fichier sommaire Full qui ouvre la boite de connexion et en fermeture de celle ci renvoie vers la racine du site, donc avec le filtre vers le sommaire Full

      J’ai essayé le filtre, sans connaissance PHP et en m’inspirant du bout de code de l’entête, mais j’ai une erreur, header non modifiable ou quelque chose comme ça.

      Je me bats avec ce truc depuis des heures si vous avez une idée..

      Merci

    • Selon nos besoins, on peut afficher ou non les liens vers les pages protégées. Sur les sites où j’utilise cette contrib, j’applique majoritairement un filtre qui permet de n’afficher dans les différents menus ou tris, page sommaire, plan du site ou autre, que les éléments dont le statut d’un internaute autorise la visualisation.

      Donc, pour un seul et même squelette, une personne ayant un statut de rédacteur verra dans le plan du site, par exemple, beaucoup plus de rubriques, d’articles, de brèves et même de sites référencés que celui qui a un statut de visiteur, qui, lui, en verra aussi plus qu’une personne non- identifiée.

      Mais ça demande une modification majeur de vos squelettes. Ça demanderait une autre contrib en fait.

    • J’imagine bien, un test de detection en haut de chaque page, ou/et Index.php3 qui envoie sur un script de detection du statut, ce qui génère une variable qui suivra la visite, + un filtre (localisé sur un fichier externe pour ne pas tout retaper à chaque fois) basé sur des mots clef (pour faciliter la vie du redacteur)pour chaque boucle de la page. Visiblement rien d’impossible, j’ai plus qu’à me taper le bouquin de PHP :-o Je ferais une contrib dans quelques mois ;-)

      A+

    Répondre à ce message

  • 3

    Très bonne contrib.

    Il manque juste l’addon pour limiter l’accès également dans l’espace privé.

    Où puis-je trouver des informations [1] pour réaliser ce petit tour de force.

    J’en aurais besoin avant la fin de l’année. Cela serait très utile pour les écoles. Je peux, si c’est utile, jouer le beta testeur.

    • Elle sera là avant la fin de l’année. Il faut juste que je prenne le temps de transposer la fonction sur une autre que j’utilise déjà. Et je te rassure, c’est vraiment simple à installer dans l’interface privée.

      Je retiens ton offre de bêta testeur et je t’en donne des nouvelles d’ici peu pour que tu puisses le tester d’ici la fin de l’année.

      Actuellement, je le fais avec une système de gestion de groupes permettant de créer des profils d’usagers limitant l’accès de façon encore plus pointue. Ce qui serait bien aussi pour un site comme le vôtre.

      Dans les faits, je combine les deux. Même les trois, puisque j’utilise aussi une autre contrib Restriction de contenu dans l’espace public et privé par le « bloc statut »
      qui te permet de choisir d’afficher ou non des éléments d’articles selon le statut tant dans l’interface privée que publique.

      D’ici une autre contrib...

      Pour une idée de ce que la gestion de groupe peut donner dans l’interface privée, je t’invite à visiter une section où j’ai commencé à documenter le tout sur un site que j’utilise pour la formation en ligne sur SPIP : http://aide.iago.ca/article.php3?id_article=226
      Les pages de cette section sont protégés dans l’interface privée et publique. Mais j’ai créé un usager dans son groupe avec le statut de visiteur :
      login : visiteur
      mot de passe : visiteur

      C’est une section de travail pour le moment, pas une contrib officielle. Le code n’est pas encore disponnible ! Mais ça marche... :-)

      Je me suis inspiré pour ça, de la contrib en attente de validation de Coyote "Créer des groupes, limiter l’accès aux rubriques et aux articles..." Rendons à César...

    • Bonjour,

      Je souhaiterais associer à une fonctionnalité de restriction des rubriques dans la partie publique une gestion de groupes d’utilisateurs, de façon à pouvoir créer des groupes de visiteurs, qui peuvent accèder à des rubriques différentes.

      As-tu publié cette contrib dont tu parles ? J’ai visité le site « iago » avec le tutoriel sur la gestion de groupes et cela paraît très abouti :-)

      Merci par avance pour ta réponse.

      Sandrine
      http://www.robins-des-villes.org

    • Pas pour le moment. Elle est en fonction sur certains de nos sites en SPIP 1.8.3 Mais je pense plutôt la rendre disponible sous forme de Plugin. Mais je manque un peu de temps ...

    Répondre à ce message

  • 9

    une variante hyper-simple pour les cas simples : rien à modifier dans votre spip à part le squelette de la page dont vous voulez resteindre l’accès.

    exemple : pour restreindre la page plan.html aux admins et rédacteurs : ajouter ces lignes de code en tout début de votre squelette plan.html (sans un seul espace blanc avant)

    <?php 
    if (isset($auteur_session['statut'])) {
      if ($auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo')  header("location:spip_login.php");
    } else {
      header("location:spip_login.php");
    } 
    ?>....le reste de votre squelette plan.html ...

    testé avec succés sur Spip 1.8.3.

    si vous placez ces lignes sur tous les pages d’un squelette (sauf bien sur login.html pour pouvoir s’identifier) vous obtenez un site privé accessible uniquement aux rédacteurs autorisés (intranet, site de travail, ...)

    • Bonjour,
      moi je voudrais juste restriendre l’accés à un article, est ce que ta solution pourrais marcher ?
      j’ai une rubrique « actualités » dedans j’ai 7 sous rubriques, mais il n’ y a que « télécharger le journal » que je veux restreindre à certains. Peux - tu m’aider ???
      Merci
      Aurélie

    • Bonjour Aurélie,

      Il y aurait bien des solutions pour ton cas. Mais, oui ! tu pourrais utiliser cette contrib pour ne limiter qu’un article.

      Comme tu pourrais aussi utiliser une autre de mes contribs : Restriction de contenu dans l’espace public et privé par le « bloc statut ». Elle te permettrait d’afficher dans ton article un message différent selon le statut de l’internaute. Tu pourrais ne pas afficher le lien sur le « télécharger le journal » pour les uns et le mettre pour les autres...

      Un des avantages de cette contrib, c’est que personne ne tomberait sur une page de login sans explication.

      On peut aussi faire une page spéciale pour ce seul article et faire un test par le statut que pour elle...

    • je ne comprend pas tout ! que dois je faire si je veux juste restreindre l’accés à l’article 44 de la rubrique 55 par exemple ??
      merci merci. Aurélie

    • Soyons simple !

      Pour limiter l’accès qu’à l’article 44, tu peux mettre en tête de ton squelette de ta page article.html :

      <?php
      if ($_REQUEST['id_article']==44&&$auteur_session['statut']!='6forum'&&$auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
              header("Location:article.php3?id_article=45"); // Adresse de destination à modifier au besoin
      }
      ?>

      Ici, si la personne n’est pas connectée comme administrateur, rédacteur ou visiteur, elle sera redirigée sur l’article 45.

      Tu mets l’adresse que tu veux.

      Si tu veux une formulation te permettant d’autres choix de redirection tu peux mettre :

      <?php
      
      // Redirection d'article par entête 
      
      switch($_REQUEST['id_article'])
              {
                      // Liste des redirections :
                      case '44'; // Numéro de l'article à rediriger
                                      // Rediriger cet article sur un autre si l'internaute n'est pas connecté commme administrateur, rédacteur ou visiteur
                                      if ($auteur_session['statut']!='6forum'&&$auteur_session['statut']!='1comite'&& $auteur_session['statut']!='0minirezo'){
                              header("Location:article.php3?id_article=45"); // Adresse de destination à modifier au besoin
                              }
                      break; // fin de la redirection                
              }
      ?>

      Et là, tu ajoutes autant de CASE avec le no d’article que tu veux avec la redirection que tu veux selon le statut que tu veux...

      N’oublie pas de mettre celà en tête de ton squelette !

    • ok je vais essayer ça alors !! mais encore une ptite question l’article qui dit par exemple « vous n’avez pas accés à cette partie du site », comment tu fais pour le cacher ? je veux dire je créé pas un article comme si je créais un article normal avec du contenu ?

    • j’ai pris ta première solution, dans l’entête du squelette c’est bien dans le « head » ??? parce que j’ai une erreur comme quoi il me manque des tags fermants pour article-principal, keywords, author, hierarchie, et auteurs. En plus, la partie de code reste grisée !! bizarre non ? tu peux encore m’aider ?

    • Non ! Tu mets ce code avant toutes choses dans ton squelette. Ne mets rien avant, ne le met pas entre d’autres tags. Débute avec ça !

    • Tout dépend de comment tu as aborder tes squelettes. J’utilise beaucoup d’articles sur mes sites pour toutes sortes d’usage autre qu’un « article » au sens « classique » du terme.

      Bien que beaucoup de squelettes soient construits pour afficher par défaut tous les articles, de les lister dans tous les menus, dans le plan du site et tout, ce n’est pas un comportement de SPIP mais un comportement déterminé par ces squelettes. C’est un choix des concepteurs de squelettes, pas de SPIP. Il ne faut pas confondre les deux. Trop souvent on entends dire, « SPIP peut faire ceci, mais SPIP ne peut faire celà » alors que c’est « La plupart des squelettes n’ont pas été pensé pour permettre de faire ceci ou celà... »

      Sur mes sites, les articles ou les rubriques qui n’ont pas le mot-clé ’menu’ ne sont pas lister dans les différents menus du site.

      J’ai plusieurs articles qui servent à libéler différents messages comme celui avertissent qu’une page est réservées. On peut même en faire autant de traduction qu’on veut... On peut faire un message générique pour toutes les pages ou choisir un message spécifique pour un secteur, pour une rubrique ou autre... Et ce, avec de simple article « ordinaire ».

      C’est très flexible, quoi !

    • j’ai mis le code au tout début, mais il reste grisé et j’ai toujours la même erreur ! pour ce qui est de l’article d’avertissement, moi j’utilise le squelette renley, je pense que mes articles sont au premier sens du terme avec spip, comme je suis débutante je ne fais pas des choses trés compliquées !! peux tu me dire comment je dois faire pour cacher cet article et d’ou vient cette erreur ?
      merci
      aurélie

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

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

Dernière modification de cette page le 20 octobre 2005