Dieses Skript dient dazu auf PHP-Seiten geschützte Bereiche bereitzustellen, in die man sich mit dem Benutzernamen und Passwort des DLRG-Account einloggen kann. Damit ist es theoretisch auch möglich, auf jeder Seiter einer Gliederungswebseite Informationen bereitzustellen, die nur eingeloggte Benutzer sehen können.
Die Anleitung gilt analog auch für PHP-Jugendseiten.
Voraussetzungen
Im Array $_DLRG_DOC
muss der Wert "session"=> true
ergänzt werden, entweder im Seitenkopf der Seite (wenn nur auf einer Seite geschützte Inhalte sein sollen) oder z.B. zentral in der globalen "config.inc".
Zum Einbinden des Skripts in den Seitenkopf der Seite oder ebenfalls zentral im Seitenkopf der index.php einfügen:
include_once('global/api/dlrgAccountLogin.php');
Dabei muss der Include Befehl nach der Stelle:
handleDoc($_DLRG_DOC);
eingefügt werden.
Damit wird auf den Seiten das Objekt $login
bereit gestellt, an das verschiedene Anfragen gestellt werden können.
In Seite einbauen
Login/Logout Formular
Gibt ein Login-Formular aus über das sich alle DLRG-Accounts einloggen können:
echo "$login->getLoginForm()";
Gibt ein Login-Formular aus über das sich nur DLRG-Accounts einloggen können, die im ISC dem Internbereich 0123456001 oder 0123456004 zugeordnet sind (zu $gruppen siehe unten):
$gruppen=array("0123456001", "0123456004"); echo "$login->getLoginForm($gruppen)";
Achtung: Trotzdem sollte für jede Ausgabe von geschütztem Inhalt auf entsprechende Berechtigung des eingeloggten DLRG-Accounts geprüft werden (siehe unten)! DLRG-Accounts, die sich auf Seite A (die einer anderen Gliederung gehören kann) eingeloggt haben, sind auch auf Seite B eingeloggt, auch wenn dort kein Loginformular vorhanden ist oder ein Loginformular, welches nur für Gruppen ein Login zulässt, denen der DLRG-Account nicht angehört. Sprich das Loginformular überprüft nur den eigentlichen Einlogvorgang, nicht aber bereits eingeloggte User.
Bereits eingeloggten Nutzern wird jeweils ein Logout-Formular angezeigt.
Berechtigung prüfen
Es stehen zwei unterschiedliche Methoden zur Verfügung, mit denen überprüft werden kann, ob sich ein Benutzer eingeloggt hat bzw. ob er zusätzlich ein von irgendeiner Gliederung bestätigter DLRG-Account ist. Bei Beiden besteht zudem die Möglichkeit, auf Zugehörigkeit zu bestimmten Internbereichen zu überprüfen.
Eingeloggt (Authenticated):
// Jeder DLRG-Account der eingeloggt ist $login->isAuthenticated() // Jeder DLRG-Account der eingeloggt ist // und im ISC dem Internbereich zugeordnet $login->isAuthenticated($gruppen)
Eingeloggt und zusätzlich bestätigt (Approved):
// ist eingeloggt und (von irgendeiner Gliederung!) bestätigter Account $login->isApproved() // ist eingeloggt, (von irgendeiner Gliederung!) bestätigter Account // und im ISC dem Internbereich zugeordnet $login->isApproved($gruppen)
Hinweis zu $gruppen
In der Variablen $gruppen kann den Methoden eine Liste von InternbereichsID übergeben werden. Die entsprechenden InternbereichsID bekommt man aus dem ISC. Die Liste muss immer ein Array mit den ID-Nummern der Gruppen angegeben sein, denen der User angehören muss. Sollte keine Gruppe angegeben sein wird auch nicht darauf überprüft.
Hinweis: die InternbereichsID sollten dem Array als String, nicht als Integer übergeben werden, da ansonsten die führende 0 (bei den meisten Gliederungen vorhanden) Probleme macht.
// richtig: $gruppen=array("0123456001", "0123456004"); // ungünstig: $gruppen=array(0123456001, 0123456004);
Rückgabemöglichkeiten
//gibt den Usernamen zurück $login->getUsername(); // gibt den realen Namen zurück $login->getRealname(); // gibt die Mailadresse zurück $login->getEMail();
Interface
Ich habe mir, da ich aus dieser Wiki-Seite nicht alle benötigten Informationen bekommen konnte, die Mühe gemacht, ein dokumentiertes Interface des $login-Objektes zu erstellen. Dies ist vermutlich unvollständig und durch etwas testen entstanden. Daher ist es vermutlich weder vollständig noch korrekt. Über Korrekturen freue ich mich entsprechend. Klasse auf Github
Beispiel
Ein Loginformular in einer Box. Darunter wird der Content ausgegeben. Einloggen kann sich jeder DLRG-Account. Content wird aber nur angezeigt wenn Account einem der Bereiche zugeordnet ist. Andernfalls: Fehlermeldung.
<?php $gruppen = array("0123456001", "0123456004"); echo "<div class=\"box\">"; echo "<h2>Ein-/Ausloggen</h2>"; echo $login->getLoginForm(); echo "</div>"; if ($login->isAuthenticated($gruppen)) { // hier der Inhalt, der nur eingeloggten Benutzern, // die dem globalen Internbereich mit der ID 0123456001 // oder 0123456004 angehören, angezeigt werden soll echo "<p>Willkommen ".$login->getRealname()."</p>"; } else { // Inhalt, der allen angezeigt wird, // die die Bedingung nicht erfüllen, z.B. echo "<p>Nicht eingeloggt oder kein Zugriff</p>"; } ?>