Development User Group
Contents
Einleitung
Sämtliche Operationen rund um den Benutzer- und Gruppenstamm erfolgt über die Klasse \FWUser. Aufgrund der komplexen Architektur ist die Initialisierung ziemlich Ressourcenaufwendig. Daher verfügt die Klasse \FWUser über die statische Methode getFWUserObject(), mit welcher eine Instanz der Klasse \FWUser zurück gegeben werden kann. Die Methode \FWUser::getFWUserObject() erstellt dabei beim ersten Aufruf eine neue Instanz der Klasse \FWUser und gibt diese zurück. Bei jedem weiteren Aufruf der Methode \FWUser::getFWUserObject() wird die bestehende Instanz von \FWUser geklont und der interne Cache der geklonten Instanz mit der originalen Instanz verlinkt. Der Cache beinhaltet alle Informationen von Benutzer und Gruppen die während des gesamten Seitenaufrufes jemals geladen wurden. Somit kann die Anzahl Datenbankabfragen auf ein Minimum gehalten werden.
Verwendet wird die Klasse \FWUser daher nie durch manuelles Instantiieren, sondern immer durch Verwendung der Methode \FWUser::getFWUserObject():
$objFWUser = \FWUser::getFWUserObject();
Die Klasse \FWUser verfügt über die zwei Objekte \FWUser->objUser und \FWUser->objGroup welche als zentrale Elemente zur Verwaltung der Benutzer, rsp. der Gruppen dienen.
Benutzer
Das Objekt \FWUser->objUser dient zwei Funktionen. Einerseits repräsentiert es den aktuell authentifizierten Benutzer (sofern dies jemand ist) und andererseits dient es als Schnittstelle zum gesamten Benutzerstamm. Letzteres bezieht sich auf die Methoden \FWUser->objUser->getUser() und \FWUser->objUser->getUsers().
Authentifizierter Besucher
Mittels der Methode \FWUser->objUser->login() kann im Frontend (im Backend ist dies nicht notwendig, da dies ja sowie so der Fall ist) überprüft werden, ob der aktuelle Besucher authentifiziert ist:
if (\FWUser::getFWUserObject()->objUser->login()) {
// Der aktuelle Benutzer ist authentifiziert
// Auf die Daten des aktuell authentifizierten Benutzers kann über das
// Objekt \FWUser::getFWUserObject()->objUser zugegriffen werden.
print "Sie sind angemeldet als ".\FWUser::getFWUserObject()->objUser->getUsername();
} else {
// Der aktuelle Benutzer ist nicht authentifiziert
print "Sie sind nicht angemeldet!";
}
Benutzer Informationen laden
Die Informationen eines einzelnen Benutzers kann mittels dessen ID über die Methode \FWUser->objUser->getUser() geladen werden:
// Benutzer mit der ID 3 laden
if ($objUser = \FWUser::getFWUserObject()->objUser->getUser($id = 3)) {
print "Der Benutzer ".$objUser->getUsername()." wurde erfolgreich geladen!";
} else {
print "Ein Benutzer mit der ID 3 konnte nicht gefunden oder geladen werden!";
}
Mittels der Methode \FWUser->objUser->getUsers() können mehrere Benutzer geladen werden.
// Alle Benutzer anfordern
if ($objUser = \FWUser::getFWUserObject()->objUser->getUsers()) {
// Das Objekt $objUser repräsentiert nun den ersten der angeforderten Benutzer
while (!$objUser->EOF) {
print $objUser->getUsername();
// Nächsten Benutzer im Objekt $objUser laden
$objUser->next();
}
} else {
print "Beim Laden der Benutzer trat ein Fehler auf!";
}
Die Methode \FWUser->objUser->getUsers() ist sehr mächtig was die selektive Abfrage betrifft. Einige Beispiele:
// Alle aktiven Benutzer von welchen der Benutzername mit den Buchstaben 'w' anfängt
\FWUser::getFWUserObject()->objUser->getUsers($filter = array('username' => '%w', 'active' => true));
// Alle Benutzer, welche Mitglied der Benutzergruppe mit der ID 3 sind
\FWUser::getFWUserObject()->objUser->getUsers($filter = array('group_id' => '3'));
// Alle Benutzer welchen in Ihrem Vornamen das Wort 'anna' oder 'john' enthalten
\FWUser::getFWUserObject()->objUser->getUsers(null, $search = array('firstname' => array('anna', 'john'));
Benutzer Informationen abfragen
Die Benutzer Informationen sind in drei Bereiche unterteilt, die Konto, Profil und Sonstige Informationen.
Konto Informationen
Eigenschaft | Methode | Kommentar |
---|---|---|
Konto ID | User->getId() | Die ID des Benutzerkontos |
Benutzername | User->getUsername() | Der Benutzername (Login Name) des Benutzers |
E-Mail Adresse | User->getEmail() | E-Mail Adresse des Benutzers |
Status | User->getActiveStatus() | Definiert ob das Benutzerkonto (in-)aktiv ist |
Benutzerrolle | User->getAdminStatus() | Definiert ob es sich um einen Administrator handelt |
Frontend Sprache | User->getFrontendLanguage() | Bevorzugte Sprache (als ID) im Frontend |
Backend Sprache | User->getBackendLanguage() | Bevorzugte Sprache (als ID) im Backend |
Letzte Aktivität | User->getLastActivityTime() | Die Zeit (als Timestamp) an dem der Benutzer das letzte Mal einen Seitenaufruf getätigt hat. |
Letzte Authentifizierung | User->getLastAuthenticationTime() | Die Zeit (als Timestamp) an dem sich der Benutzer das letzte Mal authentifiziert hat. |
Registrierungs Datum | User->getRegistrationDate() | Das Datum (als Timestamp) an dem sich der Benutzer registriert hat. |
Profil Informationen
Die Profile Eigenschaften werden mittels der Methode User->getProfileAttribute() abgerufen. Als erster Parameter wird dabei die abzufragende Eigenschaft als formale Zeichenkette übergeben. Die folgende Tabelle listet die verfügbaren Eigenschaften auf:
Eigenschaft | Beschreibung |
---|---|
picture | Avatar |
gender | Geschlecht |
title | Anrede |
firstname | Vorname |
lastname | Nachname |
company | Firma |
address | Adresse |
city | Ort |
zip | PLZ |
country | Land |
phone_office | Tel. Büro |
phone_private | Tel. Privat |
phone_mobile | Tel. Mobile |
phone_fax | Fax |
birthday | Geburtstag |
website | Website |
profession | Beruf |
interests | Interessen |
signature | Signatur |
Beispiele:
// Benutzer 4 laden
if ($objUser = \FWUser::getFWUserObject()->objUser->getUser($id = 4)) {
// Vorname und Nachname des Benutzers mit der ID 4 ausgeben
print $objUser->getProfileAttribute('firstname');
print $objUser->getProfileAttribute('lastname');
} else {
print "Ein Benutzer mit der ID 4 konnte nicht gefunden oder geladen werden!";
}
// Infos des authentifizierten Benutzers ausgeben
if (\FWUser::getFWUserObject()->objUser->login()) {
// Vorname und Nachname des Benutzers ausgeben
print \FWUser::getFWUserObject()->objUser->getProfileAttribute('firstname');
print \FWUser::getFWUserObject()->objUser->getProfileAttribute('lastname');
} else {
print "Sie sind nicht authentifiziert!";
}
// Anrede des Benutzers mit ID 4
if ($objUser = \FWUser::getFWUserObject()->objUser->getUser($id = 4)) {
// Anrede: ID und Text
print $objUser->getProfileAttribute('title'); // Numerische ID!
print $objUser->objAttribute->getById('title_'.$objUser->getProfileAttribute('title'))->getName(); // Text ("Frau", "Herr", ...)
} else {
print "Ein Benutzer mit der ID 4 konnte nicht gefunden oder geladen werden!";
}
Benutzerdefinierte Profil Eigenschaften
Eigen definierte Profil Eigenschaften werden gleich wie die normalen Profil Eigenschaften mittels der Methode User->getProfileAttribute() abgefragt. Dabei wird als erster Parameter die numerische ID der abzufragenden Eigenschaft übergeben.
Beispiele:
// Benutzer 4 laden
if ($objUser = \FWUser::getFWUserObject()->objUser->getUser($id = 4)) {
// Benutzerspezifische Eigenschaften des Benutzers mit der ID 4 ausgeben
// Die Parameter Werte 2 und 5 in diesem Beispiel referenzieren zu zwei selbst definierten Eigenschaften welche die ID's 2 und 5 aufweisen
print $objUser->getProfileAttribute(2);
print $objUser->getProfileAttribute(5);
} else {
print "Ein Benutzer mit der ID 4 konnte nicht gefunden oder geladen werden!";
}
// Infos des authentifizierten Benutzers ausgeben
if (\FWUser::getFWUserObject()->objUser->login()) {
// Benutzerspezifische Eigenschaften des Benutzers ausgeben
// Die Parameter Werte 2 und 5 in diesem Beispiel referenzieren zu zwei selbst definierten Eigenschaften welche die ID's 2 und 5 aufweisen
print \FWUser::getFWUserObject()->objUser->getProfileAttribute(2);
print FWUser::getFWUserObject()->objUser->getProfileAttribute(5);
} else {
print "Sie sind nicht authentifiziert!";
}
Sonstige Informationen
Beschreibung | Methode | ||||||
---|---|---|---|---|---|---|---|
Liefert ein Array gefüllt mit dynamischen Zugriffs-ID's des Benutzers | User->getDynamicPermissionIds() | ||||||
Bestimmt den Zugriff auf die E-Mail Adresse (dessen Sichtbarkeit).
Dabei bestehend die folgenden Arten:
|
User->getEmailAccess() | ||||||
Liefert ein Datum (Timestamp) bis wann das Konto gültig ist. | User->getExpirationDate() | ||||||
Bestimmt den Zugriff auf das Profil (dessen Sichtbarkeit).
Dabei bestehend die folgenden Arten:
|
User->getProfileAccess() | ||||||
User->getRestoreKey() | |||||||
User->getRestoreKeyTime() | |||||||
Liefert ein Array gefüllt mit statischen Zugriffs-ID's des Benutzers | User->getStaticPermissionIds() | ||||||
Mittels dieser Methode kann überprüft werden, ob der betroffene Benutzer Zugriff auf das Front-/ Backend hat. | User->hasModeAccess($backend = false) | ||||||
Definiert ob der Benutzer berechtigt ist den Zugriff auf seine E-Mail Adresse (dessen Sichtbarkeit) zu ändern. | User->isAllowedToChangeEmailAccess() | ||||||
Definiert ob der Benutzer berechtigt ist den Zugriff auf sein Profile (dessen Sichtbarkeit) zu ändern. | User->isAllowedToChangeProfileAccess() | ||||||
Definiert ob der Benutzer berechtigt ist sein Konto zu löschen. | User->isAllowedToDeleteAccount() |
Benutzer Informationen setzen
Konto Informationen
Eigenschaft | Methode | Beschreibung |
---|---|---|
Benutzername | User->setUsername() | |
E-Mail Adresse | User->setEmail() | |
Kennwort | User->setPassword() | |
Frontend Sprache | User->setFrontendLanguage() | Bevorzugte Frontend Sprache (als ID) |
Backend Sprache | User->setBackendLanguage() | Bevorzugte Backend Sprache (als ID) |
Status | User->setActiveStatus() | Definiert ob das Konto (in-)aktiv ist |
Benutzerrolle | User->setAdminStatus() | Definiert ob es sich um einen Administrator handelt |
Profil Informationen
Die Profil Informationen werden mittels der Methode User->setProfile() gesetzt. Dabei muss als Parameter ein zwei Dimensionales Array übergeben werden, welches als Schlüssel die Profileigenschaft und als Wert dessen Eigenschaftswert beinhaltet.
Beispiel:
// Benutzer 5 laden
if ($objUser = \FWUser::getFWUserObject()->objUser->getUser($id = 5)) {
// Vorname und Nachname setzen
$arrProfile = array(
'firstname' => array('Sarah'),
'lastname' => array('Conner')
);
$objUser->setProfile($arrProfile);
// Benutzerkonto speichern
if ($objUser->store()) {
print "Das Benutzerkonto wurde erfolgreich gespeichert.";
} else {
print implode("<br />", $objUser->getErrorMsg());
}
} else {
print "Ein Benutzer mit der ID 5 konnte nicht gefunden oder geladen werden!";
}
Benutzerdefinierte Profil Eigenschaften
Benutzerdefinierte Profil Eigenschaften werden gleich wie die normalen Profil Eigenschaften mittels der Methode User->setProfile() gesetzt. Dabei muss als Parameter ein zwei Dimensionales Array übergeben werden, welches als Schlüssel die numerische ID der Benutzerdefinierten Profileigenschaft und als Wert dessen Eigenschaftswert beinhaltet.
Beispiel:
// Benutzer 5 laden
if ($objUser = \FWUser::getFWUserObject()->objUser->getUser($id = 5)) {
// Benutzerdefinierte Profil Eigenschaft 2 und 6 setzen
$arrProfile = array(
2 => array('Blue'),
6 => array('Water')
);
$objUser->setProfile($arrProfile);
// Benutzerkonto speichern
if ($objUser->store()) {
print "Das Benutzerkonto wurde erfolgreich gespeichert.";
} else {
print implode("<br />", $objUser->getErrorMsg());
}
} else {
print "Ein Benutzer mit der ID 5 konnte nicht gefunden oder geladen werden!";
}
Benutzer Informationen anzeigen
See API reference:
- AccessLib
- AccessLib::setModulePrefix()
- AccessLib::setAttributeNamePrefix()
- AccessLib::parseAttribute()
// define html template of output
$template = <<<HTML
<!-- BEGIN shop_customer_profile_attribute_firstname -->
{SHOP_CUSTOMER_PROFILE_ATTRIBUTE_FIRSTNAME}
<!-- END shop_customer_profile_attribute_firstname -->
HTML;
// initiate template system
$objTemplate = new \Cx\Core\Html\Sigma();
$objTemplate->setErrorHandling(PEAR_ERROR_DIE);
$objTemplate->setTemplate($template);
// we will parse the attribute value of the currently logged in user
$objUser = \FWUser::getFWUserObject()->objUser;
// generate html output of profile attribute
$objAccessLib = new AccessLib($objTemplate);
$objAccessLib->setModulePrefix('SHOP_CUSTOMER_');
$objAccessLib->setAttributeNamePrefix('shop_customer_profile_attribute');
$objAccessLib->parseAttribute($objUser, 'firstname', 0, false, false, false, false, false);
Autonome Benutzeranmeldung
Verfügbar seit |
---|
3.0.2 |
Mit der Methode \FWUser::loginUser() kann ein Benutzer autonom (ohne Login-Formular) am System angemeldet werden.
$objUser = \FWUser::getFWUserObject()->objUser->getUser($userId);
\FWUser::loginUser($objUser)
Gruppen
Das Objekt \FWUser->objGroup dient als Schnittstelle zum gesamten Benutzerstamm. Dabei stehen die zwei Methoden \FWUser->objGroup->getGroup() und \FWUser->objGroup->getGroups() im Zentrum.
Spezifische Gruppe auswählen
Beispiel:
// Gruppe mit der ID 3 laden
if ($objGroup = \FWUser::getFWUserObject()->objGroup->getGroup($id = 3)) {
print $objGroup->getName();
print $objGroup->getDescription();
} else {
print "Eine Gruppe mit der ID 3 konnte nicht gefunden oder geladen werden!";
}
Gruppen Suchen/Filtern
Beispiel:
/**
* Alle aktiven Frontend Gruppen laden und diese aufsteigend primär nach
* dem Namen und sekundär nach der Beschreibung sortieren.
* Von der sortieren Listen sollen nur die Gruppen 15-25 geladen werden.
* Zudem soll nur die ID jeder Gruppe geladen werden.
*/
if ($objGroup = \FWUser::getFWUserObject()->objGroup->getGroups(
$filter = array('is_active' => true, 'type' => 'frontend'),
$arrSort = array('group_name' => 'asc', 'group_description' => 'asc'),
$arrAttributes('group_id'),
$limit = 10,
$offset = 15
)) {
while (!$objGroup->EOF) {
print $objGroup->getId();
$objGroup->next();
}
} else {
print "Keine Gruppen gefunden!";
}