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 :

Usage :

Autre système possibilité 100% SPIP :

Script : 

<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>

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>');
}
?>