Seite 1 von 1

Funktion Integrieren: Externe Seiten Gruppenabhängig machen!

Verfasst: 27.01.2006 20:24
von haSta
Hallo!

Ich würde gerne das Session und AUTH System von phpBB nutzen für weitere Seiten, nun ist es aber so, das ich Admin bin und das eigentlich auch kein anderer sein sollt. Wenn ich nun eine meiner Seiten mit dem Login von phpBB schützen will und ich überprüfe ob der Userstatus == Admin ist funktioniert das auch wunderbar.
Ich würde es aber gerne so realisieren, das wenn ein Benutzer in einer bestimmten Gruppe ist, bekommt er den zugang, wenn er nicht in der Gruppe ist, bekommt er den Zugang nicht.
Ich hab mich schon relativ tief mit dem phpBB Code beschäftigt und kann auch alles realisieren, deshalb vereinfache ich die Frage auf:
Gibt es schon eine Funktion mit der ich einfach überprüfen kann ob der user in einer bestimmten Gruppe ist? :-?

Danke!

Verfasst: 27.01.2006 21:46
von haSta
Ok, da ich ungeduldig bin hab ich eine function geschrieben und in der functions.php eingefügt, nur leider haut das noch nicht so ganz hin, er ist irgendwie der Meinung das das keine valide MySQL Link Resource ist. Was hab ich falsch gemacht?

Code: Alles auswählen

//Find out if the User is in specified Group.
//Herausfinden ob der User in der angegebenen Gruppe ist.
function is_user_in_group($user_id, $wanted_group)
{
	global $db;
	
	$sql = "SELECT group_id 
			FROM " . USER_GROUP_TABLE . " 
			WHERE user_id = $user_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain user and group information', '', __LINE__, __FILE__, $sql);
	}

	if ( $row = $db->sql_fetchrow($result) )
	{
		if ( $row['group_id'] == $wanted_group )
		{
			$db->sql_close();
			return true;
		}
		else
		{
			$db->sql_close();
			return false;
		}
	}
}	

Verfasst: 29.01.2006 00:41
von haSta
Ach kommt schon! :grin:

Könnt ihr mir denn gar nich helfen? Ich muss doch eine Funktion integrieren können, aber wenn er sagt das 11 keine valide MySQL Resource ist, dann hat das doch einen Grund und den kennt ihr bestimmt! :cry:

Verfasst: 29.01.2006 10:53
von Jan88
Und wenn du einfach die benutzergruppe abfragst und dann je nachdem den zugang gestattest oder einen fehler anzeigen lässt?

So verfahre ich mit meiner page

Verfasst: 29.01.2006 19:48
von haSta
Also ich habe die Funktion jetzt umgeschrieben und selbst eine Verbindung hergestellt zur Datenbank und frage den users_group table ab ob der eingeloggte benutzer in der gruppe ist die zugang hat. Wie in der Funktion oben. Aber warum funktioniert das nicht mit dem db objekt, ich kann leider keinen Fehler erkennen, wär halt schöner wenn ich die db klasse von phpBB verwenden könnte. Trtzdem Danke!

Verfasst: 31.01.2006 01:29
von webazubi
Hilft Dir das vielleicht?


<?php
/***************************************************************************
* name.php Gruppenverwaltung zum Schutz von Websites
* -------------------
* copyright : (C) 2002
* email : mail
*
*
* uses phpBB technology (c) 2001 phpBB Group <http://www.phpbb.com/>
*
***************************************************************************/

/* **************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/


define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//

include($phpbb_root_path . 'includes/page_header.'.$phpEx);


// User die zugriff haben: es sind gruppen_ids, gruppennamen und user_ids erlaubt wobei bei den gruppen namen und ids ein g am anfang angehängt werden muss.
$allowed_u = array();
$allowed_u[] = 'g3'; //gruppe

$access_allowed = false;
if( in_array($userdata['user_id'],$allowed_u))
{
$access_allowed = true;
}

else
{
$sql = "SELECT g.group_id, g.group_name
FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
WHERE ug.user_id = '" . $userdata['user_id'] . "'
AND g.group_id = ug.group_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get user group.', '', __LINE__, __FILE__, $sql);
}
$access_allowed = false;
while( list($group_id, $group_name) = $db->sql_fetchrow($result) )
{
if( in_array('g' . $group_id[group_id],$allowed_u ))
{
$access_allowed = true;
break;
}
if( in_array('g' . $group_name[group_name],$allowed_u))
{
$access_allowed = true;
break;
}
}
if( !$access_allowed )
{
message_die(GENERAL_MESSAGE, 'Sie haben keinen Zugriff auf diese Seite.');
}
}

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>


$phpbb_root_path = './'; muss entsprechend angepasst werden

Vor include($phpbb_root_path . 'includes/page_tail.'.$phpEx); kommt der Inhalt der Website

$allowed_u[] = 'g3'; //gruppe ist ein Array mit den Gruppen. Für mehrere Gruppen einfach
$allowed_u[] = 'g3'; //gruppe
$allowed_u[] = 'g4'; //gruppe
usw.