Witam
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');
}
}
}
}
?>