Si claro, un plugin:
Código PHP:
<?php
/*
* AuthorizationPlugin.php
* Extensión de la clase Zend_Controller_Plugin_Abstract
*/
class My_AuthorizationPlugin extends Zend_Controller_Plugin_Abstract
{
private $_auth;
private $_acl;
public function __construct(Zend_Auth $auth, Zend_Acl $acl)
{
$this->_auth = $auth;
$this->_acl = $acl;
}
public function preDispatch ( Zend_Controller_Request_Abstract $request )
{
$datos = $this->_auth->getStorage()->read();
$role = $datos[1];
if($role === null)
$role = 'anonimo';
if( $this->_acl->has( $this->getRequest()->getActionName() ) )
$resource = $this->getRequest()->getActionName();
elseif( $this->_acl->has( $this->getRequest()->getControllerName() ) )
$resource = $this->getRequest()->getControllerName();
elseif( $this->_acl->has( $this->getRequest()->getModuleName() ) )
$resource = $this->getRequest()->getModuleName();
if ( !$this->_acl->isAllowed($role, $resource) && $role == 'anonimo' )
{
$request->setModuleName('default');
$request->setControllerName('index');
}
elseif (!$this->_acl->isAllowed($role, $resource) )
{
$request->setModuleName('default');
$request->setControllerName('error');
}
}
}
y esta registrado en el Bootstrap. lo que comentaba, algunas veces funciona bien (cuando se pone solo hasta el nombre del controlador), pero no funciona si se pone el nombre del action y no tiene permisos para entrar (Si el rol tiene permiso, funciona siempre correctamente)
Gracias
Un saludo