Gestion d’une restriction d’accès avec une base de données du type phpBB

Gestion d’une restriction d’accès sous SPIP grace à une base de données du type phpBB.

temps d’installation si SPIP
et
phpBB sont déja installés
 :
10 minutes
licence : GNU/GPL
auteur de l’intégration SPIP  :
Thomas Gassilloud http://thomas.pomeys.org
thomas.gassilloud@pomeys.org 
site exemple : www.pomeys.org 
version : 1.00 (21 juin 2004)

 De nombreux sites ont besoin de restreindre l’accès tout
ou partie de leur contenu à certaines personnes identifiées. Le
problème se pose donc aussi pour SPIP qui
doit pouvoir gérer tout type de contenu. Dans ce cas, la restriction d’accès
doit pouvoir se gérer facilement grâce à l’interface d’administration pour
que le site reste vraiment collaboratif (ie que la technique ne soit pas une
barrière à la mise en place de contenu). La solution proposée n’est
certainement pas inviolable mais peux etre une utiliser pour obtenir une premier
niveau de sécurités.

NB : Ce script correspond à un cahier des charges assez particulier ou l’on
souhaitait bien différencier la base de données de restriction d’accès avec
celle des rédacteurs SPIP. Pour fusionner les
deux voir http://www.tunecity.net/fr_art_authentication_spip_phpbb=119.html D’autre
part, les pièces jointes dans IMG ne sont bien sur pas protégées.

Mise en place :

  • Dans phpBB, créer les groupes adéquats en étant loggé en
    administrateur.
  • Dans l’interface d’administration de SPIP,
    créer un groupe de mots-clés nommé authentification par exemple sous SPIP
    puis y ajouter le nom des groupes en mots clés.
  • Adapter le script ci dessous à la configuration de cotre site, en
    particulier le numéro du groupe de mots clés d’authentification et le
    répertoire ou trouver phpBB
  • Copier le script modifié au début des squelettes (fichiers *.html) SPIP
    ou autres fichiers que vous voulez protéger
  • Supprimer la mise en cache de SPIP pour ce que vous voulez protéger, il
    suffit de mettre le délai de mise à jour à 0 dans les fichiers *.php3
    d’appel. Par exemple pour rubrique.php3
      < ?php
     $fond = « rubrique » ;
     $delais = 0 ;
     include (« inc-public.php3 ») 
      ?>

Usage :

  • Grâce à l’interface d’administration de SPIP,
    les rédacteurs SPIP associe aux 
    articles, rubriques ou brèves un mot clé qui correspond au groupe qui
    pourra accéder au contenu.
  • L’utilisateur s’enregistre à phpBB
    grâce au formulaire du forum
  • L’administrateur l’ajoute aux groupes phpBB
    correspondant au contenu qu’il souhaite lui rendre disponible
  • Lors de la première consultation, l’utilisateur s’identifie et le reste
    pendant quelques jours. Grace à un cookie, la restriction est alors
    transparente pour lui et ne nécessite pas qu’il se ré identifie à chaque
    consultation de nouveau contenu.

Autre système possibilité 100% SPIP :

Script : 

<BOUCLE100(MOTS)id_rubriqueid_groupe=2>

< ?php

// Mettez le répertoire d’installation de phpBB
$phpbb_root_path=’/home/admin/siteweb/forum/’ ;

// Mettez le groupe qui sera autorisé à parcourir les pages ou ce script sera intégré
$secure_against_group_name = ’#TITRE’ ;

define(’IN_PHPBB’, true) ;
include($phpbb_root_path.’extension.inc’) ;
include($phpbb_root_path.’common.’.$phpEx) ;
include($phpbb_root_path.’config.’.$phpEx) ;

$sql="SELECT * FROM « . $table_prefix . "config WHERE config_name = ’script_path’" ;
if ( !($result = $db->sql_query($sql)) )

die( »<B>Erreur :</B> Ne peux obtenir le script <BR>SQL : $sql") ;


if ($db->sql_numrows($result) == 0)

die("<B>Error :</B> L’info du script n’existe pas<BR>SQL : $sql") ;

$row = $db->sql_fetchrow($result) ;
$phpbb_script_path = $row[config_value] ;

//
// Début de la gestion de session
//
$userdata = session_pagestart($user_ip, PAGE_INDEX) ;
init_userprefs($userdata) ;
//
// Fin de la gestion de session
//

// Si l’utilisateur n’est pas loggé, le redirigé avec une page d’authentification
if( !$userdata[’session_logged_in’] )

header("Location : " . append_sid($phpbb_script_path . « login. » . $phpEx .
" ?redirect=" . $PHP_SELF)) ;


// Prendre le group_id
$sql="SELECT group_id FROM " . $table_prefix . « groups WHERE group_name = ’ » .
$secure_against_group_name . « ’ LIMIT 1 » ;
if ( !($result = $db->sql_query($sql)) )

die("<B>Erreur :</B> Ne peux pas obtenir des infos sur le nom du groupe<BR>SQL :
$sql") ;


if ($db->sql_numrows($result) == 0)

die(« <B>Erreur :</B> Le groupe <b>$secure_against_group_name</b> n’existe pas. ») ;

$row = $db->sql_fetchrow($result) ;
$secure_against_group_no = $row[group_id] ;

// Vérifier si l’utilisateur est membre du bon groupe.
$sql="SELECT * FROM « . $table_prefix . "user_group WHERE group_id=’" .
$secure_against_group_no . »’ AND user_id=’" . $userdata[user_id] . « ’ LIMIT 1 » ;

if ( !($result = $db->sql_query($sql)) )

die("<B>Erreur :</B> Ne peux pas obtenir les bonnes informations<BR>SQL :
$sql") ;


if ($db->sql_numrows($result) == 0)

die("<B>Désolé, accès non autorisé, vous devez etre un membre du groupe
’$secure_against_group_name’</B>") ;

// Si l’utilisateur a les bons droits, laissons lui continuer le chargement de la page
 ?>
</BOUCLE100>

Bonus :

Pour mettre un formulaire d’identification à l’intérieur de vos pages, vous
pouvez y insérer le script :

< ?php
define(’IN_PHPBB’, true) ;
$phpbb_root_path = ’../forum/’ ;
include($phpbb_root_path . ’extension.inc’) ;
include($phpbb_root_path . ’common.’.$phpEx) ;
$userdata = session_pagestart($user_ip, PAGE_INDEX) ;
init_userprefs($userdata) ;
if( $userdata[’session_logged_in’] )

echo(’deja loggé,<a href="http://www.pomeys.org/forum/login.php?logout=true">cliquer ici pour se déconnecter</a>’) ;

else

echo(’<form action="../forum/login.php" method="post"><input
type="text" name="username" size=« 25 »><br />
<input type="password" name="password" size=« 25 »><br />
<input type="submit" value=« connectez vous » name="login">
</form><a href="../forum/profile.php ?mode=register&agreed=true">obtenir des identifiants</a>’) ;

 ?>

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