Cierto, yo pensaba que intentaba entrar en el action crear del controlador propuesta del modulo tematica (segun el ejemplo que puse en el primer mensaje)
entonces al no tener permiso intenta entrar en: default/error/
y al no indicar el action, si intentamos entrar en tematica/propuesta/index
iria a: default/error/index (por eso no daba problemas, esa vista si existía)
y si queremos entrar en tematica/propuesta/crear, daba error porque queria entrar en: default/error/crear y daba el error de que no existia la vista.
Al final añadimos el action en el 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');
[B]$request->setActionName('index');[/B]
}
}
}