Buenas amigos, el plugin funciona bien el problema es que no redirecciona, les explico:
Basicamente el plugin lo que hace es no permitir el acceso a usuarios que no tengan el usuario y rol correspondiente y, efectivamente, eso funciona perfecto, no permite el acceso a ninguna pagina que no corresponda.
El problema es que yo quiero que redireccione; o sea si coloco:
www.misitio.com/index/actionrestringido
no permite el acceso si no tengo permisos, me muestra el action nopermitido, pero no me cambia la url, en la direcc. se sigue viendo:
www.misitio.com/index/actionrestringido
cuando yo quiero que se vea:
www.misitio.com/index/nopermitido
Estoy usando el setRequestUri del Request, pero no funciona.
Aqui les dejo el plugin:
Código PHP:
Ver originalclass Mis_Plugins_Auth extends Zend_Controller_Plugin_Abstract
{
protected $_auth;
protected $_acl;
const NO_AUTH_MODULE = 'default';
const NO_AUTH_CONTROLLER = 'index';
const NO_AUTH_ACTION = 'nopermitido';
const NO_ACL_MODULE = 'default';
const NO_ACL_CONTROLLER = 'index';
const NO_ACL_ACTION = 'nopermitido';
public function __construct()
{
$this->_auth = Zend_Auth::getInstance();
$this->_acl = new Mis_Acl($this->_auth); //Zend_Registry::get( 'Zend_Acl' );
}
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
if ($this->_auth->hasIdentity()) {
$role = $this->_auth->getIdentity()->role;//$role = $this->_auth->getIdentity()->role;
} else {
$role = 'invitado';
}
$controller = $request->controller;
$action = $request->action;
$module = $request->module;
//$resource = $controller;
$resource="$module:$controller";
if (!$this->_acl->has($resource)) {
$resource = null;
}
if (!$this->_acl->isAllowed($role, $resource, $action)) {
if (!$this->_auth->hasIdentity()) {
$module = self::NO_AUTH_MODULE;
$controller = self::NO_AUTH_CONTROLLER;
$action = self::NO_AUTH_ACTION;
} else {
$module = self::NO_ACL_MODULE;
$controller = self::NO_ACL_CONTROLLER;
$action = self::NO_ACL_ACTION;
}
}
$request->setRequestUri('/index/nopermitido');
$request->setModuleName($module);
$request->setControllerName($controller);
$request->setActionName($action);
//$request->setPathInfo('/index/nopermitido');
}
}
Saludos.