Practical Zend_ACL + Zend_Auth Implementierung und Best Practices

Kontext:

Meine Fragen beziehen sich auf eine im forum bin ich die Entwicklung ziemlich genau, wie SO, wo gibt es:

  1. Gäste, die Zugriff auf view-threads, kann aber nicht Antworten oder abstimmen
  2. - Mitgliedern, die mit genug rep, Bearbeiten/vote andere threads, und standardmäßig können Sie Antworten und haben die gleichen Vorrechte, wie Sie die Gäste
  3. admins, die können so ziemlich alles tun,

Ich würde mir wünschen, diese ACL angewendet werden site-weite, und durch die default deny-alle Ressourcen.

Lese ich die Grundlagen der Verwendung von Zend_Acl - in, dass Sie im Grunde erstellen von Rollen ( Gast, Mitglied, admin ) und entweder verweigern oder zulassen Ressourcen ( Steuerungen, Methoden ), um diese Rollen. Die Dokumentation ist nicht sehr spezifisch, wie sollten Sie auch tatsächlich umzusetzen, die acl-code in Ihre Anwendung, so ging ich auf der Suche auf SO..

Stieß auf eine ziemlich nützliche stackoverflow Antwort von marekdie wirft etwas Licht auf die Frage, aber aufgrund meiner Unkenntnis kann ich es immer noch nicht ganz Begriffen hat, wie man richtig implementieren diese mit best practices im Hinterkopf.

Das poster hat eine statische Datei configAcl.php in den Stammordner der Anwendung, die Initialisierung der acl-Objekt, fügt Rollen, schafft eine Ressource von jeder Steuerung gibt admin Zugriff auf alles, gibt normal Zugriff auf alles, aber der admin und speichert die acl-Objekt in der Registrierung für die spätere Verwendung.

$acl = new Zend_Acl();

$roles  = array('admin', 'normal');

//Controller script names. You have to add all of them if credential check
//is global to your application.
$controllers = array('auth', 'index', 'news', 'admin');

foreach ($roles as $role) {
    $acl->addRole(new Zend_Acl_Role($role));
}
foreach ($controllers as $controller) {
    $acl->add(new Zend_Acl_Resource($controller));
}

//Here comes credential definiton for admin user.
$acl->allow('admin'); //Has access to everything.

//Here comes credential definition for normal user.
$acl->allow('normal'); //Has access to everything...
$acl->deny('normal', 'admin'); //... except the admin controller.

//Finally I store whole ACL definition to registry for use
//in AuthPlugin plugin.
$registry = Zend_Registry::getInstance();
$registry->set('acl', $acl);

Frage #1 - Sollte dieser code in die bootstrap oder in eine eigenständige Datei wie diese? Wenn ja, wäre es besser, wenn es drin war, sagen, das library-Verzeichnis?

Zweiten Teil ist es eine neue Klasse, die sich die Zend-Controller-Plugin Abstrakte Klasse, die es ermöglicht, angeschlossen werden in auth/logindie Logik ist im Grunde, wenn der login fehlschlägt, leitet es.. sonst packt Sie das acl-Objekt von der registry verwendet, ergreift die Identität, und bestimmt, ob der Benutzer berechtigt ist, diesen Bereich zu sehen.

$identity = $auth->getIdentity();

$frontController->registerPlugin(new AuthPlugin());

Frage #2 - Wie genau sollte ich das code der auth-plugin Teil, der tatsächlich gibt die Identität des Benutzers? Ich merke, dass er hatte einige code unten erzeugt einen Auth-adapter-db-Tabelle-Objekt, das würden Abfrage einer Datenbank Tabelle Spalte von Benutzer-id und Anmeldeinformationen ( Hash-pass-Prüfung ).. ich bin verwirrt, wo dies passt mit der getIdentity Teil.

Sagen wir mal meine Benutzer-Tabelle wurde aus diesen Daten:

user_id    user_name    level
1          superadmin   3
2          john         2
3          example.com  1

Wobei Stufe 3 = admin, 2 = Mitglied 1 = Gast.

Frage #3 - wo genau ist ein guter Ort, um die oben genannten auth-code? Innerhalb der login-controller?

Frage #4 - poster Antworten mit seinem Artikel auf, wie die acl-Logik sollte getan werden, innen-Modelle, noch die spezifische Methode, die er verwendet, wird nicht nativ unterstützt und erfordert einen workaround, ist das machbar?? Und ist es wirklich, wie es im Idealfall sein sollte fertig?

InformationsquelleAutor der Frage meder omuraliev | 2010-01-12

Schreibe einen Kommentar