Ziel:
Eine Seite auszuliefern, die je nach Userrole eine andere View anzeigt.
Derzeitige Methode1:
Das ACL Plugin, welches die preDispatch Methode beinhaltet und dort checkt, ob dem User erlaubt wird auf eine bestimmte Seite Seite zuzugreifen heißt "Default_Plugin_AccessCheck".
Dieses wird in der Hauptbootstrap als Plugin registriert.
Jetzt habe ich im Plugin eine getAcl() Methode geschrieben.
Um mir die aktuelle ACL zu holen gehe ich im Controller der angeforderten Action wie folgt vor:
PHP-Code:
$Default_Plugin_AccessCheck = Zend_Controller_Front::getInstance()->getPlugin('Default_Plugin_AccessCheck');
$this->view->role = Zend_Registry::get('role');
$this->view->acl = $Default_Plugin_AccessCheck->getAcl();
In der View frage ich dann via
PHP-Code:
if ($acl->isAllowed($role, 'default:index', 'index')) { echo 'anzeigen'; } else { echo '';};
ab, ob derjenige Zugriff auf die Action hat und zeige entsprechend den Button/das Element an oder nicht.
Idee:
Als nächste Idee kam mir, die Teile, die nicht jedem sichtbar sein sollen, in extra Views auszulagern (viewsub.phtml) und sie in der "Hauptview" (view.phtml) zusammen zu setzen.
Beispiel-Hauptview (view.phtml):
PHP-Code:
[...]
<?php echo $this->viewsub; ?>
[...]
Allerdings hab ich via Google keine Anhaltspunkte gefunden, dass das direkt geht.
Hintergrund dieser Idee:
Ohne eigenen Check/Funktion den bereits integrierten/hausinternen ACL Check anzustoßen, da eine neue Resource+Action angefordert wird.
__________________________________________________
Ich weiß allg. nicht wie es sonst umgesetzt wird, die derzeitige Methode habe ich mir "zusammen gebastelt".
Daher lauten die Fragen:
1.) Wie geht man vor, wenn man dem User nur bestimmte Elemente anzeigen lassen möchte?
2.) Ist meine derzeitige Methode sinnvoll?
3.) Gibt es eine bessere Alternative?