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

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