Seite 6 von 8

Verfasst: 03.02.2008 12:02
von Helmut
Hallo Dave,

die Seiten befinden sich alle innerhalb des phpbb Verzeichnises, sind daher fest eingebunden. Ok, dann werde ich das über das auth() System realisieren, zumindest bei der Navigation. Bei den Themenseiten sind es im Verhältnis nur ein paar Seiten, da weis ich noch nicht genau, wie ich es dann mache.

Gruß Helmut

Verfasst: 03.02.2008 12:14
von Dave
Neue Kategorie in den User Auth erstellen (wohl am besten mit dem Namen Homepage). Dort kannst du dann alle Berechtigungen reinpacken... Wie z.b. für die seiten usw... Um dann die rechte zu geben kannste jedem user einzelnd die rechte geben oder einer gruppe die rechte geben :wink:

MfG
Dave

Verfasst: 21.03.2008 12:48
von Helmut
Hallo,

bei der Navigation bin ich noch nicht richtig weiter gekommen. Ich habe in der Tabelle für die Menüpunkte auch eine Spalte in der die Gruppen ID's eingetragen sind, welcher der betreffende User sehen darf. Damit möchte ich dann schon bei der Abfrage der Menüpunkte aus der Tabelle die betreffenden Punkte ausfiltern.

Um das so machen zu können, muss ich aber schon vorher wissen, in welchen Gruppen der jeweilige User Mitglied ist. Wie bekomme ich nun eine Liste dieser Gruppen ID's?

Gruß Helmut

Verfasst: 21.03.2008 13:15
von Dave
Helmut hat geschrieben:Um das so machen zu können, muss ich aber schon vorher wissen, in welchen Gruppen der jeweilige User Mitglied ist. Wie bekomme ich nun eine Liste dieser Gruppen ID's?
includes/functions_user.php

Code: Alles auswählen

/**
* Obtain either the members of a specified group, the groups the specified user is subscribed to
* or checking if a specified user is in a specified group. This function does not return pending memberships.
*
* Note: Never use this more than once... first group your users/groups
*/
function group_memberships($group_id_ary = false, $user_id_ary = false, $return_bool = false)
z.B.:

Code: Alles auswählen

group_memberships(false, 2);
MfG
Dave

Verfasst: 21.03.2008 13:52
von Helmut
Hallo Dave,

das mit der Funktion group_memberships habe ich mir schon angeschaut, aber das bringt mir ja kein array in der die ID's stehen.

Bei mir steht z.B. in der Tabelle in der Spalte tab_group_id für den betreffenden Menüpunkt 5,7,16, .... drinnen. Der User gehört den Gruppen 2,5,9, ... an, dann dürfte er den Menüpunkt sehen, weil er auch in der Gruppe 5 ist, welche in der Spalte genannt ist.



[EDIT]
Die Gruppen ID's des jeweiligen Users habe ich so aus der Tabelle user_group geholt:

Code: Alles auswählen

// zu überprüfender User ( Beispiel: Der User, der diese Seite aufgerufen hat )
$benutzer_id = $user->data['user_id'];

$nav_list = array();

$sql = 'SELECT group_id, user_id
		FROM ' . USER_GROUP_TABLE . "
		WHERE user_id = $benutzer_id
		ORDER BY user_id ASC";
$result = $db->sql_query($sql);
while ($nav_data = $db->sql_fetchrow($result))
{
	for( $i = 0; $i < count($i); $i++ )
	{				
		$nav_list[$i] = $nav_data['group_id'];			
		$ids = $nav_data['group_id'] . ',';
	}
}
$db->sql_freeresult($result);
Damit steht im Array $ids die Liste der Gruppen ID's des betreffenden Users durch ein Komma getrennt drinnen.

Wie müsste dann die Abfrage für die Datenbank aussehen, wenn bereits bei der Abfrage der Tabelle nach der Gruppenzugehörigkeit z.B. mit AND tab_group_id = $group_id gefiltert wird?


Gruß Helmut

Verfasst: 23.03.2008 20:27
von Helmut
Hallo,

ich habe das Problem jetzt gelöst, es ging mit $sql_array = array( ...... Die Abfrage sieht jetzt so aus:

Code: Alles auswählen

//ID des eingeloggten Users bestimmen
$benutzer_id = $user->data['user_id'];

$sql_array = array(
	'SELECT'	=> 'n.*, g.group_id, g.user_id',

	'FROM'		=> array(
		NAVIGATION_TABLE	=> 'n',
	),

	'LEFT_JOIN'	=> array(
		array(
			'FROM'	=> array(USER_GROUP_TABLE => 'g'),
			'ON'	=> "n.tab_group_id = g.group_id AND g.user_id = $benutzer_id",
		),
	),

	'WHERE'		=> "((n.subtab_1 = 0) AND (n.tab_group_id = 0) AND ($status = 0)) OR ((n.subtab_1 = 0) AND (n.tab_group_id = g.group_id) AND ($status = 0))",
	'ORDER BY'		=> "n.toptab ASC",
);
$sql = $db->sql_build_query('SELECT', $sql_array);
$result = $db->sql_query($sql);

while ($nav_data = $db->sql_fetchrow($result))
{
.......
Die Vorlage dazu habe ich mir aus der Datei funktions_display.php abgeschaut.

Gruß Helmut

Verfasst: 24.03.2008 10:04
von Dr.Death
Die Anleitung dazu findet man in den Coding Guidelines:

http://area51.phpbb.com/docs/coding-guidelines.html#sql

Dort mal nach: sql_build_query(): suchen.

Verfasst: 12.04.2008 23:01
von Bitti
Dr.Death hat geschrieben:Verschoben hab ich es nicht...... aber ich hab eine Zusammenfassung dort erstellt:

Gruppenzugehörigkeiten eines Benutzers prüfen

Vielen Dank auch an alle Mitwirkende (Beta Tester)....

Kann es sein, daß dieses Snippet unter 3.0.1 nicht mehr funktioniert?

Verfasst: 12.04.2008 23:24
von 4seven
Ich hab es mal bis zum Ecxess unter 3.0.0 versucht zum laufen zu bringen.
Da aber ein konkretes Beispiel fehlte, hab ichs aufgegeben.

Verfasst: 17.04.2008 10:35
von Bitti
Bitti hat geschrieben:
Dr.Death hat geschrieben:Verschoben hab ich es nicht...... aber ich hab eine Zusammenfassung dort erstellt:

Gruppenzugehörigkeiten eines Benutzers prüfen

Vielen Dank auch an alle Mitwirkende (Beta Tester)....

Kann es sein, daß dieses Snippet unter 3.0.1 nicht mehr funktioniert?
Kann mir jemand dazu was sagen ob es funktioniert?