Zugriff auf Benutzerdaten
Benutzerdaten werden in Stud.IP in einer Datenbank verwaltet. Hierbei werden Benutzer
durch eine systemweit eindeutige Zeichenkette, die sogenannte user_id, identifiziert.
Sie besteht aus 32 Zeichen (Zahlen und Buchstaben) und wird bei der Registrierung
durch die PHP-Funktion uniqid
zufällig erzeugt.
Grundlegende Tabellen der Datenbank
Im Folgenden werden die für die Benutzerverwaltung relevanten Teile der Datenbank
im Detail erläutert. Es handelt sich hierbei um die Tabellen auth_user_md5,
user_info, roles_studipperms und roles. Die Benutzerdaten wurden auf mehrere Tabellen
verteilt, um das System leichter an neue Gegebenheiten anzupassen. Die Bedeutung
dieser Tabellen erschließt sich im Folgenden.
auth_user_md5
Die Tabelle auth_user_md5 beinhaltet unter anderem folgende Datenfelder jedes
Benutzers:
- user_id, welches hier als Primärschlüssel der Tabelle dient
- username, der Name mit dem sich ein Benutzer anmeldet
- Vorname
- Nachname
- Email
Außerdem wird im Feld perms die Benutzerberechtigung gespeichert. Dies geschieht
in Form eines Namens, der in der Tabelle roles_studipperms mit einer dazugehörigen
Identifikationsnummer definiert ist.
user_info
Die Tabelle user_info enthält einen Großteil der persönlichen Daten eines Benutzers,
welche über den Reiter Nutzerdaten auf der eigenen Homepage vom Benutzer selbst
verändert werden können.
Felder dieser Tabelle sind beispielsweise:
- geschlecht, wobei 1 für weiblich und 0 für männlich steht
- score, enthält die StudIP-Punktzahl des Benutzers
- title_front bzw. title_rear, welche den vor- bzw. nachgestellten Titel einer Person
enthalten
roles_studipperms und roles
folgt…
Die StudIPUser-Klasse
Die Klasse StudIPUser
dient dem einfachen und konsistenten Zugriff auf die Benutzerdaten
aus den einzelnen Tabellen, so dass diese nicht explizit mit SQL-Selects
abgefragt werden müssen. Sie sollte folglich verwendet werden, um mit dem eingeloggten
Benutzer zu arbeiten, und bietet Zugriff auf die Daten aus der Tabelle
auth_user_md5.
Nachfolgende Methoden stehen in dieser Klasse zur Verfügung:
getPermission
, gibt ein Permission-Objekt zurück
getUserid
getUsername
getSurname
getGivenname
, gibt den Vornamen zurück
Beim Erzeugen eines Objektes aus dieser Klasse wird automatisch die user_id des
eingeloggten Benutzers aus einem globalen assoziativen Array auth
mit dem Element
uid
gelesen.
Die Permission-Klasse
Ein Permission-Objekt wird automatisch vom StudIPUser-Objekt erzeugt und stellt
einige Methoden zur Verfügung, über die sich die Berechtigungen von Benutzern
überprüfen lassen.
Dazu gehören:
hasRootPermission
hasAdminPermission
hasTutorPermission
hasTeacherPermission
hasStudentPermission
isStudent
Diese Methoden liefern alle true
oder false
zurück.
Anzumerken ist noch, dass hasStudentPermission
nur überprüft, ob der Benutzer
die Rechte eines Autors hat. isStudent
dagegen überprüft zusätzlich noch,
ob der Benutzer kein Dozent ist, da dieser ebenfalls die Rechte eines Autors hätte.
Zugriff auf diese Objekte
Wenn man die eigene Pluginklasse von der Klasse AbstractStudIPHomepagePlugin
ableitet, hat man Zugriff auf die Objekte StudIPUser
und Permission
. Dies
geschieht durch eine von der Klasse AbstractStudIPPlugin
vererbte Methode
getUser
bzw. durch die Methode getPermission
der Klasse StudIPUser
.
(:source lang=php:)
class TestPlugin extends AbstractStudIPHomepagePlugin {
public $user;
private $permissions;
public function TestPlugin() {
parent::AbstractStudIPHomepagePlugin();
$this->user = $this->getUser();
$this->permissions = $this->user->getPermission();
}
public function Test() {
if ($this->permissions->isStudent()) {
echo _("Ein Student mit dem Benutzernamen ");
echo $this->user->username;
}
}
}
Zugriff auf andere Benutzerdaten
Um auf Daten anderer Benutzer zuzugreifen, wie sie zum Beispiel in der Tabelle
user_info zu finden sind, wird die Klasse UserManagement
benötigt. Diese erfordert
im Konstruktor als Parameter die user_id des Benutzers, mit dem gearbeitet
werden soll.
Wurde ein Objekt dieser Klasse erzeugt, ist es möglich auf die Benutzerdaten über
das assoziative Array $user_data
zuzugreifen, welches die Daten aus den Tabellen
auth_user_md5 und user_info enthält.
Der Zugriff erfolgt über $user_data[’Tabellenname.Feldname’]
. Um zum
Beispiel den Benutzernamen aus der Tabelle auth_user_md5 abzufragen:
$user_data[’auth_user_md5.username’]
.
Benutzerdaten lassen sich über die Methode changeUser($array)
verändern,
wobei $array
ein assoziatives Array von der gleichen Form wie eben beschrieben
sein muss.
Die user_id eines beliebigen Benutzers lässt sich über eine Abfrage der Tabelle
auth_user_md5 mit dem dazugehörigen Benutzernamen herausfinden.