Seite 1 von 1

Abfrage der Gruppenzugehörigkeit

Verfasst: 06.08.2006 20:34
von scheibenbrot
Hallo,
ich verstehe nicht genau, was man mit DIESEM MOD machen muss, damit es funktioniert.
Hier mal der Code:

Code: Alles auswählen

<?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); 
?>
In der readme steht folgendes:

Code: Alles auswählen

$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.
Aber ich verstehe z.B. nicht, wo der Code hin muss, was nur für eine Gruppe sichtbar sein soll.
Also ich möchte die gesammte ignorlist da einbaun, aber wie??

mfg

Re: Abfrage der Gruppenzugehörigkeit

Verfasst: 07.08.2006 00:10
von punkface
Hallo
CoolKetschup hat geschrieben: Aber ich verstehe z.B. nicht, wo der Code hin muss, was nur für eine Gruppe sichtbar sein soll.
Wie schon in der index.txt steht, muss der Code der Seite, welche nur für bestimmte Benutzer zugänglich sein soll, vor

Code: Alles auswählen

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
eingefügt werden.

Welche Benutzer oder Gruppen zutritt haben, bestimmst du im Array $allowed_u Die Erklärung dazu steht in der name.php:

Code: Alles auswählen

// 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. 
Bspw. mit

Code: Alles auswählen

$allowed_u = array(2, 'g1', 'ggruppe1');
würden alle Benutzer die Seite anschauen können, die
- in der Benutzergruppe mit der ID 1
- in der Benutzergruppe mit dem Namen gruppe1
sind, und der Benutzer mit der ID 2

Du brauchst also schon etwas PHP Kenntnisse für den MOD. Wenn du damit nicht zurecht kommst, erklär mal genau was du haben willst. Also welche Ignorlist du meinst (Name des MODs) und welche Gruppe(n) die Ignorlist anschauen dürfen (IDs der Gruppen).

Verfasst: 07.08.2006 00:28
von scheibenbrot
Hallo,
danke, dass du mir hilfst :)
Also der Link zu dem MOD findest du HIER.
Ich möchte das nur die Gruppe mit der ID 29 diese Seite betreten, öffnen, kann.
Danke

mfg

Verfasst: 07.08.2006 01:13
von punkface
Speicher diesen Code mal als function_group_access.php im Verzeichnis includes/

Code: Alles auswählen

<?php
/*
Code vom MOD "Abfrage der Gruppenzugehörigkeit" von saerdnaer - http://www.phpbb.de/moddb/group_access
*/

function group_access($access_ary)
{
	global $db, $userdata;

	if( in_array($userdata['user_id'], $access_ary) ) 
	{ 
		return 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); 
		}

		while($row = $db->sql_fetchrow($result) ) 
		{ 
			if( in_array('g' . $row['group_id'], $access_ary) ) 
			{ 
				return true; 
			} 

			if( in_array('g' . $row['group_name'], $access_ary) ) 
			{ 
				return true;
			} 
		} 
	}

	return false;
}
?>

ignore.php
suche

Code: Alles auswählen

//
// End session management
//
danach einfügen

Code: Alles auswählen

include_once($phpbb_root_path . 'includes/function_group_access.' . $phpEx);
if(!group_access(array('g29')))
{
	message_die(GENERAL_MESSAGE, $lang['Disallowed_Page_Access']); 
}
(Das könntest du jetzt z.B. genau so auch in der memberlist.php benutzten, wenn diese nur die Mitglieder aus der Benutzergruppe mit der ID 29 sehen sollen.)

language/lang_german/lang_main.php
suche davor einfügen

Code: Alles auswählen

$lang['Disallowed_Page_Access'] = 'Zugriff auf diese Seite verwehrt';
(die lang_main.php's anderer installierter Sprachen müssen auch angepasst werden)

Verfasst: 07.08.2006 01:47
von scheibenbrot
Hey danke, das sieht schon gut aus.
Ich bin aber schon lange auf den Beinen, ich geh dann jetzt mal ins Bett, ich werd heut früh ausprobieren, aber es sieht schon gut aus, ich glaube das war die Lösung
Danke

mfg

Verfasst: 07.08.2006 11:14
von scheibenbrot
CoolKetschup hat geschrieben:Hey danke, das sieht schon gut aus.
Ich bin aber schon lange auf den Beinen, ich geh dann jetzt mal ins Bett, ich werd heut früh ausprobieren, aber es sieht schon gut aus, ich glaube das war die Lösung
Danke

mfg



edit: :o :o :o juhu es geht, 100000 Dank

Verfasst: 08.08.2006 11:05
von mafiatom
In dem Script hatte sich ein Fehler eingeschlichen, richtig muss es heissen:

Code: Alles auswählen

        while($ergebnis = $db->sql_fetchrow($result) )
        { 
                if( in_array('g' . $ergebnis[group_id],$allowed_u )) 
                { 
                         $access_allowed = true; 
                         break; 
                } 
                if( in_array('g' . $ergebnis[group_name],$allowed_u)) 
                { 
                         $access_allowed = true; 
                         break; 
                } 
        } 
Dann klappt es auch mit den Gruppen!

Verfasst: 08.08.2006 11:05
von scheibenbrot
Funktioniert ja schon, dank punkface :wink: