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:
Saludos. Ver original
class 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'); } }