Cita: Pero luego no viene como y desde donde llamar a esta clase, ni como denegar o permitir Action de los diferentes Controller de la aplicacion.
Se me olvido comentar, en la clase que publicaste es donde indicas si deniegas o permites el acceso a los módulos/controladores/acciones dependiendo del rol del usuario que los solicita, hay mismo indicas los roles que tu aplicación soportará
Ahora tienes que crear un Controller_Plugin para verificar estos datos, un ejemplo seria:
Código PHP:
Ver originalclass My_Plugins_Acl extends Zend_Controller_Plugin_Abstract
{
public function __construct() {
$this->_auth = Zend_Auth::getInstance();
$this->_acl = new My_Acl();
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
//Obtengo las credenciales del usuario
$role = $this->_auth->hasIdentity() ? $this->_auth->getInstance()->getIdentity()->role : 'guest';
//Tomamos el nombre del recurso actual (action,controller,module)
if ($this->_acl->has($this->getRequest()->getActionName())) {
$resource = $this->getRequest()->getActionName();
}else if ($this->_acl->has($this->getRequest()->getControllerName())) {
$resource = $this->getRequest()->getControllerName();
}else if ($this->_acl->has($this->getRequest()->getModuleName())) {
$resource = $this->getRequest()->getModuleName();
}
//Ahora verificaremos los permisos
//Si no pasa la prueba (!$this->_acl_isAllowed), entonses el usuario no a iniciado sesion y si
//el rol es guest mando al modulo auth a iniciar session
if (!$this->_acl->isAllowed($role,$resource) && $role == 'guest') {
$request->setModuleName('default');
$request->setControllerName('authentication');
$request->setActionName('sigin');
}
//Ahora si no ah pasado la prueba y NO ES guest, entonses muestro un mensaje de error
if (!$this->_acl->isAllowed($role, $resource)) {
$request->setModuleName('default');
$request->setControllerName('authentication');
$request->setActionName('error');
}
}
}
?>
y por ultimo registramos el plugin en el Bootstrap.php
Código PHP:
Ver originalpublic function _initPlugins() {
$this->bootstrap('frontController');
//Registro los plugins
$this->frontController->registerPlugin(new My_Plugins_Acl());
}
Pero para esto, tienes que combinar Zend_Acl con Zend_Auth para que funcione!!!