Auslesen der Gruppenzugehörigkeiten eines benutzers

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
FBI
Mitglied
Beiträge: 67
Registriert: 24.02.2005 15:49

Auslesen der Gruppenzugehörigkeiten eines benutzers

Beitrag von FBI »

Hi,

bei der Einbindung meines Forums in die Website bin ich auf folgende problemstellung gestoßen:

Ich möchte auf meiner Website einige Seiten machen, die nur für bestimmte Gruppen zugänglich sind. Also z.B. freunde.php nur für Mittglieder der Gruppe "Freunde", kollegen.php nur für Mitglieder der Gruppe "Kollegen" etc.

Ich habe das Forum in die Homepage wie hier beschrieben eingebunden.

Ich hoffe, dass es nicht nötig ist, die Gruppenzugehörigkeit direkt aus der Datenbank auszulesen, da steig ich nicht ganz durch (also wie die Gruppen und die Gruppenzugehörigkeiten in den Datenbanken gespeichert werden, das Tabellenlayout blick ich net...)
Falls doch, könnte mir das ja vielleicht jemand erklären, wäre nett.

Ich dachte mir aber eigentlich, dass die $user-Klasse doch diese Informationen schon enthalten sollte.
Also irgendeine Möglichkeit, ein Array aller Gruppen zu bekommen, in denen ein User mitglied ist, wie gesagt, am besten ohne nocheinmal extra auf die Datenbank zugreifen zu müssen.

Über eine Antwort würde ich mich freuen

FBI
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Hallo,

nein, diese Info wird nicht im $user Array gespeichert.

Ich habe mir um die Gruppenzugehörigkeit abzufragen eine kleine Funktion gebastelt, die einfach "ja, User ist in der entsprechenden Gruppe" oder "Nein, kein Mitglied" zurückliefert.

Code: Alles auswählen

/**
* get_formel_auth
*
* Get formel auth status
* Returns TRUE if user_id is in $access_group
*/
function get_formel_auth()
{
	global $db, $formel_config, $user;

	$access_group = $formel_config['restrict_to'];
	$sql = 'SELECT g.group_id 
		FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
		WHERE g.group_id = ug.group_id
			AND ug.user_id = ' . $db->sql_escape($user->data['user_id']) . '
			AND ug.user_pending <> ' . TRUE . '
			AND g.group_id = ' . $db->sql_escape($access_group);
	$result = $db->sql_query($sql);

	$check_formel_auth = $db->sql_affectedrows($result);
	$db->sql_freeresult($result);
	if ( $check_formel_auth <> 0 )
	{
		return TRUE;
	}
	return FALSE;
}
Die Zeile:

Code: Alles auswählen

$access_group = $formel_config['restrict_to'];
müsstest Du dir auf Deine verwendete Gruppe anpassen.

Beispiel: "Freunde" sind alle in der Gruppe "Freunde" mit der Gruppen ID 5

Code: Alles auswählen

$access_group = 5;
Benutzeravatar
RyoBerlin
Mitglied
Beiträge: 304
Registriert: 24.05.2004 14:11
Wohnort: Berlin

Beitrag von RyoBerlin »

hmm werd da noch nicht ganz schlau draus.

was macht man dann auf den seiten?

<!-- IF $access_group = 5 --> ....

oder wie geht das dann?

Und woher weis man die Nummer der gruppe?
Glaube nichts auf bloßes Hörensagen hin; glaube nicht an Überlieferungen, weil sie alt sind.
(Buddha, 553-483 v.Chr.)
Benutzeravatar
Berliner Schildkroete
Mitglied
Beiträge: 563
Registriert: 30.03.2007 19:02
Wohnort: Berlin

Beitrag von Berliner Schildkroete »

@RoyoBerlin

Die GruppenID findest du über die Datenbank heraus.
_______________________________________________________________

1. Wo muss ich den Code einbauen, wenn ich ihn mit einem IF-Code einbauen
möche?

Code: Alles auswählen

<!-- IF --> 
2. Wo muss ich den Code einbauen, wenn ich ihn so einbauen möchte:

Code: Alles auswählen

if (!$user->data['is_in irgendeiner Gruppe'])
Grüße
Berliner Schildkröte
kein Support via PN, etc. - Befolgung meiner Vorschläge auf eigene Gefahr!
Benutzeravatar
RyoBerlin
Mitglied
Beiträge: 304
Registriert: 24.05.2004 14:11
Wohnort: Berlin

Beitrag von RyoBerlin »

hmm da hab ich wohl was falsch gemacht

Code: Alles auswählen

Parse error: syntax error, unexpected ')' in /www/htdocs/w0090034/includes/template.php(518) : eval()'d code on line 148

Code: Alles auswählen

<!-- IF --> if (!$user->data['is_in 18']) <a href="{U_USER_MAP}" title="Mitglieder-Karte">MAP</a> | <!-- ENDIF -->
Glaube nichts auf bloßes Hörensagen hin; glaube nicht an Überlieferungen, weil sie alt sind.
(Buddha, 553-483 v.Chr.)
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Ich glaube Ihr solltet Euch mal in diesem Artikel vertiefen:

http://olympuswiki.naderman.de/Template_Syntax

Die PHP Datei, die Eurer HTML Template steuern soll muss die u.g. Funktion eingebaut haben.

Code: Alles auswählen

/** 
* get_group_auth 
* 
* Get group auth status 
* Returns TRUE if user_id is in $access_group 
*/ 
function get_group_auth($access_group = 5) 
{ 
   global $db, $user; 

    
   $sql = 'SELECT g.group_id 
      FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug 
      WHERE g.group_id = ug.group_id 
         AND ug.user_id = ' . $db->sql_escape($user->data['user_id']) . ' 
         AND ug.user_pending <> ' . TRUE . ' 
         AND g.group_id = ' . $db->sql_escape($access_group); 
   $result = $db->sql_query($sql); 

   $check_group_auth = $db->sql_affectedrows($result); 
   $db->sql_freeresult($result); 
   if ( $check_group_auth <> 0 ) 
   { 
      return TRUE; 
   } 
   return FALSE; 
}
Dann erstellt Ihr Euch in der gleichen PHP eine Abfrage:

Code: Alles auswählen

// Die folgende Zahl ist die ID der Gruppe die Ihr prüfen möchtet
$check_group = 10;

// Ist der User, der diese PHP Datei aufgerufen hat, in der Gruppe mit der o.g. ID ??
$is_in_group = get_group_auth($check_group);

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück.
if ($is_in_group == true)
{
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt
	$template->assign_var('S_IN_GROUP', true);
}
In der zur PHP Datei passenden HTML Template Datei kommt nun folgender "Switch":

Code: Alles auswählen

<!-- IF S_IN_GROUP --><a href="{U_USER_MAP}" title="Mitglieder-Karte">MAP</a> | <!-- ENDIF -->
Sollte der User nicht in der Gruppe gewesen sein, so hat die Variable S_IN_GROUP den Wert "false" und wird somit nicht aktiv.
Benutzeravatar
RyoBerlin
Mitglied
Beiträge: 304
Registriert: 24.05.2004 14:11
Wohnort: Berlin

Beitrag von RyoBerlin »

hmm iss ja schlecht das muss man also in jeder php ändern

index, viewtopic usw...

habs erstmal in die index gepackt und die IF anweisung in die overall header..

resultat ist das beim aufrufen auf der seite steht

Code: Alles auswählen

// Die folgende Zahl ist die ID der Gruppe die Ihr prüfen möchtet $check_group = 18; // Ist der User, der diese PHP Datei aufgerufen hat, in der Gruppe mit der o.g. ID ?? $is_in_group = get_group_auth($check_group); // Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück. if ($is_in_group == true) { // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt $template->assign_var('S_IN_GROUP', true); }
hmmm
Glaube nichts auf bloßes Hörensagen hin; glaube nicht an Überlieferungen, weil sie alt sind.
(Buddha, 553-483 v.Chr.)
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17473
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Ich glaube du hast da etwas verwechselt bzw. etwas komplett falsch eingebaut.

Verlinke doch mal bitte deine veränderte index.php ( oder die Datei wo der Code rein soll ) als TXT Datei.

Zudem noch ein kleiner Hinweis:

Die index.php steuert NICHT die overall_header.html
Dafür ist die includes/functions.php zuständig.

Ich werde hier aber keine Schritt für Schritt Anleitung geben, der Code war auch nur ein Beispiel, den sich jeder selber anpassen muss.
Benutzeravatar
RyoBerlin
Mitglied
Beiträge: 304
Registriert: 24.05.2004 14:11
Wohnort: Berlin

Beitrag von RyoBerlin »

ja fehler gerade gesehen... doing ;)

mit dem steuern schau ich gleich danke
---------
nagut ich gebs auf.. jenachdem wo ichs hinsetze kommt ne andere fehlermeldung.. mach ichs weiter oben z,b,

Code: Alles auswählen

Fatal error: Call to a member function on a non-object in /www/htdocs/w0090034/includes/functions.php on line 16
und das war der text in der functions

Code: Alles auswählen

/**
* get_group_auth
*
* Get group auth status
* Returns TRUE if user_id is in $access_group
*/
function get_group_auth($access_group = 5)
{
   global $db, $user;

   
   $sql = 'SELECT g.group_id
      FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
      WHERE g.group_id = ug.group_id
         AND ug.user_id = ' . $db->sql_escape($user->data['user_id']) . '
         AND ug.user_pending <> ' . TRUE . '
         AND g.group_id = ' . $db->sql_escape($access_group);
   $result = $db->sql_query($sql);

   $check_group_auth = $db->sql_affectedrows($result);
   $db->sql_freeresult($result);
   if ( $check_group_auth <> 0 )
   {
      return TRUE;
   }
   return FALSE;
}
// Die folgende Zahl ist die ID der Gruppe die Ihr prüfen möchtet
$check_group = 18;

// Ist der User, der diese PHP Datei aufgerufen hat, in der Gruppe mit der o.g. ID ??
$is_in_group = get_group_auth($check_group);

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück.
if ($is_in_group == true)
{
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt
   $template->assign_var('S_IN_GROUP', true);
}
Glaube nichts auf bloßes Hörensagen hin; glaube nicht an Überlieferungen, weil sie alt sind.
(Buddha, 553-483 v.Chr.)
Benutzeravatar
Berliner Schildkroete
Mitglied
Beiträge: 563
Registriert: 30.03.2007 19:02
Wohnort: Berlin

Beitrag von Berliner Schildkroete »

versuch mal das:
es liegt an:

Code: Alles auswählen

// Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt
   $template->assign_var('S_IN_GROUP', true); 
lösche ihn und füge nach:

Code: Alles auswählen

// The following assigns all _common_ variables that may be used at any point in a template.
	$template->assign_vars(array(
danach einfügen:

Code: Alles auswählen

'S_IN_GROUP'					=> true,
EDIT: DANN IST DER CODE WIRKUNGSLOS :cry:

Mach es einfach in die "normalen Datein"

DANKE DOC DER CODE GEHT WUNDERBAR!!!!!
Grüße
Berliner Schildkröte
kein Support via PN, etc. - Befolgung meiner Vorschläge auf eigene Gefahr!
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“