Jestem w trakcie przepisywania Acl tak by plugin w preDispach tylko sprawdzał uprawnienia a lista była trzymana w configach.
Wszytsko pięknie, stworzyłem plik acl.php w katalogu configs, przypisałem go do zmiennej w _initAcl w bottstrapie ale nie moge go przekazac w argumencie konstruktora do pluginu.
protected function _initAcl() { $this->_acl = require APPLICATION_PATH . '/configs/acl.php'; $fc = Zend_Controller_Front::getInstance(); $fc ->registerPlugin(new My_Plugin_Acl($this->_acl)); }
var_dump zmiennej z acl pokazuje prawidłowo że jest to obiekt Zend_Acl ale gdy odpalam stronę dostaje błąd że do konstruktora Pluginu nie został żaden parametr przekazany

/configs/acl.php
<?php $acl = new Zend_Acl; $acl -> addRole(new Zend_Acl_Role('guest')); $acl -> addRole(new Zend_Acl_Role('user'),'guest'); $acl -> addRole(new Zend_Acl_Role('admin')); $acl -> addResource('index'); $acl -> addResource('auth'); $acl -> addResource('quiz'); $acl -> addResource('error'); $acl -> allow('guest', 'index'); $acl -> allow('guest','auth','login'); $acl -> allow('guest','error'); $acl -> allow('user', 'quiz'); $acl -> allow('user','auth','logout'); $acl -> allow('admin',NULL); return $acl; ?>
Plugin
<?php class My_Plugin_Acl extends Zend_Controller_Plugin_Abstract { private $_acl = NULL; public function __construct(Zend_Acl $acl) { $this->_acl = $acl; } public function preDispatch(Zend_Controller_Request_Abstract $request) { $auth = Zend_Auth::getInstance(); if($auth->hasIdentity()) { $identity = $auth->getIdentity(); $role = $identity->role; } else { $role = 'guest'; } $controller = $request->controller; $action = $request->action; if(!$this->_acl->isAllowed($role, $controller, $action)) { if($role=='guest') { $request->setControllerName('auth'); $request->setActionName('login'); } else { $request->setControllerName('index'); $request->setActionName('index'); } } } } ?>