Seite 1 von 1

Gruppennamen ausgeben lassen

Verfasst: 04.05.2007 07:56
von konne
Gibt es möglicherweise eine fertige Funktion, um Gruppennamen anhand einer Gruppen-ID auszugeben?

Ich habe in einigen meiner eigenen Seiten einen Zugriffsschutz eingebaut, damit nur bestimmte Gruppen Zugriff haben.

Code: Alles auswählen

$allowed_u[] = 'g7'; // Zugriff nur für Gruppe 7
if (!isset($allowed_u))
  $allowed_u = array();
$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))) {
  echo 'Datenbankabfrage fehlgeschlagen';
}
$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($access_allowed == FALSE)
  echo 'kein Zugriff';
else
  echo 'Seiteninhalt';
Kann man also beispielsweise als Fehlermeldung die zugriffsberechtigten Gruppen auflisten?

Verfasst: 04.05.2007 13:44
von Miriam
Sprechen wir von Scripten des phpBB? Falls ja: Von welchen? Was soll das Kriterium sein, dass die Gruppen ausgesperrt oder reingelassen werden?

Die SQL Query wäre vllt so besser (ungetestet):

Code: Alles auswählen

// Zugriff nur für die Gruppen: hier, kommen, alle, gruppen und rein
$allowed_u = 'hier, kommen, alle, Gruppen, rein';

$sql = "SELECT g.group_id, g.group_name
	FROM " . USER_GROUP_TABLE . " ug INNER JOIN " . GROUPS_TABLE . " g
	WHERE ug.user_id = '".$userdata['user_id']."'
	AND g.group_id = ug.group_id
	AND g.group_name IN ('".$allowed_u."')";
Falls ein Wert zurückkommt, ist der User in einer Gruppe, die brechtigt ist.
Du brauchst den Wert als solches nicht zu prüfen.

Schau auch hier --> Klick

Verfasst: 04.05.2007 15:11
von konne
Das Script beruht auf der Vorlage für in phpBB eingebundene Seiten und dem MOD Abfrage der Gruppenzugehörigkeit. D.h. ich habe Seiten, die Benutzer nur betreten bzw. gänzlich sehen dürfen, wenn sie bestimmter Gruppen angehören. Gehören sie nicht dazu, sollen sie eine Information wie z.B. "Diese Seite darf nur von Nutzern der Gruppe ... betreten werden".

Das ganze funktioniert auch alles schon ganz gut, nur dass ich liebend gerne den Nutzern zusätzlich mitteilen möchte, welcher Grupper die Seite angedacht ist.

Verfasst: 04.05.2007 17:13
von Miriam

Code: Alles auswählen

$allowed_u[] = 'g7';
Bedeutet das, dass die Gruppe mit der ID 7 Zugriff hat und Du willst jetzt den Namen der Gruppe mit der ID 7 raus bekommen?

Code: Alles auswählen

for ($i=0; $i<count($allowed_u); $i++)
{
	if (!$i)
	{
		$gruppen = $allowed_u[$i];
	}
	else
	{
		$gruppen .= ", " . $allowed_u[$i];
	}
}
$sql = "SELECT group_name FROM '".GROUPS_TABLE."' WHERE group_id IN ("'.$gruppen.'")";
Die Query gibt dann die Gruppennamen zurück.
Oder habe ich das immer noch falsch verstenden?

Verfasst: 04.05.2007 18:30
von konne
Miriam hat geschrieben:Bedeutet das, dass die Gruppe mit der ID 7 Zugriff hat und Du willst jetzt den Namen der Gruppe mit der ID 7 raus bekommen?
Im Prinzip ist das schon richtig verstanden worden. Alle User die in der Gruppe 7 sind sollen in dem Fall zugriffsberechtigt sein. Die Funktion "Abfrage der Gruppenzugehörigkeit" schaut allerdings scheinbar nicht nur nach Usergruppen. Es ist auch möglich nur einzelnen Usern per ID (ohne führendes "g") den Zutritt zu gewähren. Das macht es natürlich wieder etwas komplexer, sodass ich mein Problem wohl etwas zurückstellen werde.
Sollte allerdings jemand eine passende Lösung parat haben, wäre ich dankbar. Am besten so, dass am Ende ein String ($access) heraus, der alle Berechtigten per Komma getrennt auflistet (Gruppe x, y, z + zusätzlich User a, b, c).