Tipps und Tricks (Teil 2)

Veröffentlicht am 15.01.2013 von Jockl in Adventskalender 2012

Im Adventskalender am 13.12.2012

Eigene Seiten nur für bestimmte Usergruppen oder User


In diesem Türchen unseres Adventkalenders haben wir gesehen, wie man Toplinks nur bestimmten Usergruppen zugänglich machen kann.

Wir wollen uns nun ansehen, wie man das auch für eigenen Seiten umsetzen und zudem auch noch bestimmte User-IDs berücksichtigen kann.

Um die Abfrage nach Usergruppen oder User-IDs vornehmen zu können, müssen die hierfür notwendigen, globalen Variablen geladen werden.
Dies wird, wie in der o.a. Doku über eigene Seiten gezeigt, durch folgende Zeile erledigt:

require("global.php");

Danach kann die zur Abfrage notwendige Variable $mybb angesprochen werden.

Wie eine Usergruppe abgefragt wird, das haben wir bereits bei den Toplinks erfahren. Wir wollen bei den eigenen Seiten den Usergruppen den Zutritt zu einer eigenen Seite verweigern und ihnen zugleich mitteilen, dass ihnen die notwendige Berechtigung fehlt.

Hierzu definieren wir die Usergruppe(n), die keinen Zutritt zu der Seite bekommen sollen, in dem Array $myDisabledUsergroups.

$myDisabledUsergroups = array(1, 7); // Gäste und gebannte User haben keinen Zutritt

Hinweis: Der Inhalt des Arrays kann jederzeit um weitere Usergruppen, getrennt durch ein Komma, ergänzt bzw. erweitert werden.

Nun wollen wir aber auch noch speziellen Usern, die u.U. nicht den o.a. Usergruppen zugeordnet sind, den Zugang zu der Seite verweigern.

Hierzu erstellen wir wieder ein neues Array. Dieses Mal aber für die User-IDs. Im Folgenden nehmen wir an, dass es die User-IDs 23 und 58 gibt, die wir ausschließen wollen:

$myDisabledUserIDs = array(23, 58);

Hinweis: Auch der Inhalt dieses Arrays kann jederzeit um weitere User-IDs, getrennt durch ein Komma, ergänzt bzw. erweitert werden.

Nun verbinden wir die Überprüfung beider Arrays mit der Zuweisung des Hinweises für die fehlende Berechtigung.

if(in_array($mybb->usergroup['gid'], $myDisabledUsergroups) || in_array($mybb->user['uid'], $myDisabledUserIDs))
{
error_no_permission();
}

Eingebunden in den Code einer eigenen Seite, hier die Impressum-Seite aus unserer Doku, würde das dann so aussehen:

<?php
define("IN_MYBB", 1);
//define("NO_ONLINE", 1); // Wenn Seite nicht in Wer ist online-Liste auftauchen soll

require("global.php");

add_breadcrumb("Impressum");

$myDisabledUsergroups = array(1,7); // Gäste und gebannte User haben keinen Zutritt
$myDisabledUserIDs = array(23,58);

if(in_array($mybb->usergroup['gid'], $myDisabledUsergroups) || in_array($mybb->user['uid'], $myDisabledUserIDs))
{
error_no_permission();
}

eval("$impressum = \"".$templates->get("impressum")."\";"); // Hier wird das erstellte Template geladen
output_page($impressum);
?>

Für Rückfragen stehen wir natürlich im Forum jederzeit gerne zur Verfügung.