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 :
- Paramétrage avancé d’un site avec mes_options.php3
- Comment protéger par mot de passe des rubriques ou des articles
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.p... 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>’) ;
?>


