SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Auteurs et Authentification > Restriction de l’accés aux contenus

Accès restreint par adresse IP

vendredi 26 octobre 2007, par Gefonline. Dernier ajout lundi 29 octobre 2007


Définir un intranet accessible selon l’adresse IP du visiteur


Introduction

Bonjour, l’objectif de cette contrib est de proposer une solution simple de mise en place d’un intranet par adresse IP dans un site entièrement sous SPIP. Elle ne fait appel à aucun plugin mais seulement aux fonctionnalités de SPIP. La démarche est on ne peut plus simple !

Étape 1 :

Définir dans l’espace privé de son site une rubrique Intranet qui contiendra l’ensemble des sous-rubriques et articles dont on veut limiter l’accès. On supposera ici que cette rubrique est la numéro 10.

Étape 2 :

Créer à la racine du site un dossier que l’on appelera ici mon_dossier (personnellement j’ai choisi Intranet ;). On supposera par ailleurs que l’ensemble des squelettes du site sont dans le dossier squelettes.

Étape 3 :

- Créer un premier jeu de squelettes pour la rubrique 10 : rubrique-10.html, article-10.html et si besoin est rubrique=10.html (en particulier si la page d’accueil de l’intranet doit proposer un contenu différent des autres rubriques de l’intranet) [1]
Dans ce jeu de squelettes, on y incluera toutes les boucles et les balises nécessaires à l’affichage de notre contenu intranet. Ce jeu de squelettes est ensuite placé dans le dossier mon_dossier.
- Créer un deuxième jeu de squelettes équivalent au premier (mêmes noms) mais avec un contenu différent. Cette fois on ne laisse s’afficher que ce que l’on veut que l’utilisateur lambda puisse voir : ça peut être un message simple indiquant que l’on n’est pas dans l’environnement requis pour accéder à l’intranet, on peut vouloir malgré tout afficher le titre des sous-rubriques ou autres infos de l’intranet, ou bien tout simplement afficher la page d’erreur 403... L’essentiel étant bien entendu de ne pas utiliser de balise ou de boucle qui afficheraient des informations auquelles on veut restreindre l’accès ! Ce deuxième jeu est placé quand à lui dans le dossier squelettes.

Étape 4 :

c’est là que toute la flexibilté de SPIP rentre en jeu. Il s’agit désormais d’appliquer notre restriction. Si l’utilisateur a la bonne adresse IP, alors SPIP utilisera les squelettes du dossier mon_dossier, sinon il utilisera ceux du dossier squelettes. Pour ce faire, on utilise le fichier mes_options.php [2] dans lequel on insère le code suivant :

La première ligne permet de récupérer l’adresse IP du visiteur. Cette valeur est ensuite utilisée pour appliquer les conditions définies par le code php dans les lignes suivantes. C’est tout !

J’espère que vous trouverez cette contrib utile, les solutions proposées à ce jour pour définir un espace intranet dans son site sous SPIP ne sont pas légion.

P.-S.

Pour info, dans mon cas, l’accès implique différents domaines d’adresse IP. Aussi, pour la condition, le code utilisé est le suivant :

if((preg_match('/170[.][0]*38[.][0-9]+[.][0-9]+/',$ip)==1)||
  (preg_match('/170[.][0]*40[.]100[.][0-9]+/',$ip)==1)||
  (preg_match('/170[.][0]*42[.]101[.][0-9]+/',$ip)==1))

Notes

[1] Pour en savoir plus sur ces nominations de fichier voir l’article Les variantes de squelette.

[2] Pour en savoir plus sur la définition d’un dossier squelette à l’aide du fichier mes_options, voir les articles Où placer les fichiers de squelettes ? et Les variables de personnalisation.


Répondre à cet article

  • Accès restreint par adresse ip

    26 octobre 2007 20:11, par Julien Falconnet

    Excellent ! Robuste, efficace et SIMPLE.

    En plus je suppose que le cache doit bien retrouver ses petits. Question : Est-ce que le "else" de mes_options.php est nécessaire dans la mesure ou cela correspond au comportement par défaut de spip ?

    Ah oui, sinon j’ai un peu buté sur le if($ip==""), j’ai d’abord cru que c’était vraiment une chaine vide qu’on cherchait. Est-ce que if($ip="monreseaulocal") ne serait pas plus clair.

    Répondre à ce message

    • Accès restreint par adresse ip 29 octobre 2007 07:33, par Gefonline

      Tout d’abord merci pour ta suggestion. J’ai modifié l’article pour plus de clarté. En ce qui concerne le "else", ta remarque est sans doute vrai dans le cas d’un dossier par défaut de SPIP, et donc dans le cas présenté ci-dessus ; perso, j’ai pas essayé. D’une manière plus générale, cette contrib permet de définir deux types de contenus pour une même rubrique selon l’adresse ip du visiteur lui permettant d’accéder aux pages du dossier spécifié dans le if ou celui spécifié dans le else et leurs squelettes respectifs. Ce dernier ne sera pas forcément un dossier par défaut. Je préfère donc laisser le code complet pour ceux qui comme moi ne maitrisent pas tout à fait le php et ses finesses...

      Répondre à ce message

    Retour au début des forums



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et fonctionnement SPIP-Contrib | SPIP | L'autre.net