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.
<BOUCLE100(MOTS){id_rubrique}{id_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>
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>');
}
?>