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>’);

?>

updated on 21 October 2005

Discussion

Une discussion

  • merci pour cette contrib, après quelques bidouillages ca marche nickel et chacun auteur peut lui meme restreindre l’accès a son article :)

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom