Abfrage der Forenberechtigungen

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und PHP/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Abfrage der Forenberechtigungen

Beitrag von oxpus »

Wer auf Kriegsfuß mit den Forenberechtigungen steht und nicht weiß, wie er dieses System für ein eigenes Script verwenden soll, dem wird hier ein wenig geholfen.

Fangen wir damit an festzustellen, welche Foren ein User überhaupt sehen darf:

Code: Alles auswählen

$is_auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
$allowed_forum_sql = '';
while( list($key, $value) = each($is_auth_ary) )
{
	if ($value['auth_read'])
	{
		$allowed_forum_sql .= (($allowed_forum_sql != '') ? ', ' : '') . $key;
	}
}
if ( $allowed_forum_sql != '' )
{
	$auth_sql = " AND f.forum_id IN ($allowed_forum_sql) ";

	// Code für die Foren
}
$auth_sql beinhaltet die SQL-Bedingung für die Foren, der der User sehen darf.
An der Stelle "// Code für die Foren" folgt dann das Script, was aus den besagten Foren Daten abfragt und aufbereitet.
$auth_sql ist in der betreffenden Foren-Abfrage mit einzubinden; ggf. dafür noch anzupassen.
Weitere (vorhandene) Berechtigungsabfragen sind hier nicht mehr nötig...

Diese Abfrage beinhaltet auf Wunsch auch alle anderen Berechtigungen, wie im Standard-phpBB wie folgt vorhanden sind:

auth_view => Forum sehen
auth_read => In dem Forum lesen
auth_post => Im Forum Beiträge erstellen
auth_reply => Auf Beiträge antworten
auth_edit => Beiträge bearbeiten
auth_delete => Beiträge löschen
auth_sticky => Wichtig erstellen
auth_announce => Ankündigungen erstellen
auth_vote => An einer Umfrage teilnehmen
auth_pollcreate => Eine Umfrage erstellen

Darüber hinaus gibt es je nach installiertem Mod weitere Berechtigungen. Hier ein paar der bekannteren:

auth_globalannounce => Globale Ankündigungen erstellen
auth_attachments => Anhänge posten
auth_download => Anhänge herunterladen/anzeigen

Diese Berechtigungen werden in der obigen Abfrage als Schlüssel in das Array $is_auth_ary gepackt, wie auch schon mit $is_auth_ary['auth_read'] zu sehen.
Ein TRUE auf einen der o.g. Schlüssel (Keys) besagt, daß der User hierzu berechtigt ist. Und das im ganzen Forum, welches abgefragt wurde.

Zur Funktion auth() selber:
Die Funktion kann in verschiedenen Möglichkeiten aufgerufen werden.
Die häufigste Methode ist die Abfrage der einer/aller Berechtigung einzelner/aller Foren.

Dazu die entsprechende Funktion:
auth(AUTH_KEY, AUTH_AREA, $userdata);

AUTH_KEY
Die Berechtigung, die man abfragen möchte.
Diese wird (analog der obigen Reihenfolge der Schlüssel) wie folgt angegeben:

AUTH_VIEW
AUTH_READ
AUTH_POST
AUTH_REPLY
AUTH_EDIT
AUTH_DELETE
AUTH_STICKY
AUTH_ANNOUNCE
AUTH_VOTE
AUTH_POLLCREATE

AUTH_GLOBALANNOUNCE
AUTH_ATTACH
AUTH_DOWNLOAD

AUTH_ALL
ist hier auch möglich. Damit werden alle Berechtigungen zurückgeliefert.

AUTH_AREA
Der Bereich der Foren, für die die Berechtigungen zu prüfen ist.

AUTH_LIST_ALL fragt alle vorhandenen Foren ab. Ist aber auch nur zu gebrauchen, wenn es um den Foren-Index oder Abfragen aus allen Foren betrifft, wie in der index.php.
Ansonsten ist hier die Foren-ID einzutragen, für die Berechtigungen abgefragt werden soll. In der viewforum.php und viewtopic.php ist dieses z.B. der Fall, da hier ja immer nur das aktuelle Forum zu betrachten ist.

$userdata
Erklärt sich von selbst.
Hier wird der Funktion der User übergeben, für den die Berechtigungen zu prüfen sind. Das kann hier ein anderer User eingetragen werden, als der aktuelle User, wenn man z.B. eine Übersicht der gesetzten Berechtigungen erstellen will.

Schlussworte
Somit haben wir nun die wichtigsten Regeln und Funktionsweisen für die Berechtigungsstruktur im phpBB kennen gelernt.
Mit der eingangs genannten Abfrage und den angeführten Berechtigungsschlüsseln sollte es nun möglich sein, allen Rechten auf die Schliche zu kommen.
Zuletzt geändert von oxpus am Di 08.Nov, 2005 11:46, insgesamt 1-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten