Zend_Auth und Zend_Acl

Einen Benutzer authentifizieren

Benutzer werden über einen Zend_Auth_Adapter authentifiziert. Für dieses Beispiel verwende ich die Authentifizierung über eine Datenbank-Tabelle. Diesem Adapter wird mitgeteilt, welchen Adapter er für die Datenbank-Verbindung verwenden soll, in welcher Tabelle die Zugangsdaten zu finden sind, welche Spalte die Identität und welche das Passwort enthält und zu guter Letzt, wie das Passwort behandelt werden soll.

$authAdapter = new Zend_Auth_Adapter_DbTable(
    Zend_Db_Table_Abstract::getDefaultAdapter(), // Datenbank-Adapter
    'my_user',                                   // Tabelle
    'nickname',                                  // Identität-Spalte
    'password',                                  // Passwort-Spalte
    'MD5(?)'                                     // Passwort ist MD5 verschlüsselt
);

Normalerweise gibt der sich authentifizierende Benutzer seinen Nicknamen und sein Passwort in ein Formular ein und schickt dieses ab. Die von ihm gegebenen Daten können dann mit dem Zend_Auth_Adapter geprüft werden.
Ich gehe davon aus, dass eine Variable $form eine Zend_Form-Instanz referenziert, mit der gearbeitet werden kann und über die ich die Values der Formular-Felder abrufe:

$values = $form->getValues();

$authAdapter->setIdentity($values['nickname'])
            ->setCredential($values['password']);

$authResult = My_Auth::getInstance()->authenticate($authAdapter);

if ($authResult->isValid()) {
    // Der Benutzer hat korrekte Daten angegeben und wurde erfolgreich authentifiziert
}

Dieser Vorgang muss normalerweise nur einmal durchgeführt werden, nämlich dann, wenn der Benutzer sich einloggt. Danach brauch nur noch geprüft werden, ob eine Identität vorhanden ist.

My_Auth::getInstance()->hasIdentity();

Um zu prüfen, ob der Benutzer auch das entsprechende Recht hat, eine bestimmte Aktion durchzuführen, ruft man My_Acl::isAllowed() mit den entsprechenden Parametern auf.

My_Auth.php1.35 KB

My_Acl.php2.93 KB

Annika , 27.08.2010 um 22:05

php zend zend_auth zend_acl