Foros del Web » Programando para Internet » PHP » Zend »

Problema redireccion en plugin

Estas en el tema de Problema redireccion en plugin en el foro de Zend en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/02/2011, 08:34
pur
 
Fecha de Ingreso: agosto-2007
Mensajes: 98
Antigüedad: 17 años, 3 meses
Puntos: 4
Problema redireccion en plugin

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 original
  1. class Mis_Plugins_Auth extends Zend_Controller_Plugin_Abstract
  2. {  
  3.     protected $_auth;
  4.     protected $_acl;
  5.  
  6.     const NO_AUTH_MODULE        = 'default';
  7.     const NO_AUTH_CONTROLLER  = 'index';
  8.     const NO_AUTH_ACTION         = 'nopermitido';
  9.  
  10.     const NO_ACL_MODULE          = 'default';
  11.     const NO_ACL_CONTROLLER    = 'index';
  12.     const NO_ACL_ACTION           = 'nopermitido';
  13.  
  14.     public function __construct()
  15.     {
  16.         $this->_auth = Zend_Auth::getInstance();
  17.         $this->_acl =  new Mis_Acl($this->_auth); //Zend_Registry::get( 'Zend_Acl' );
  18.     }
  19.  
  20.     public function preDispatch(Zend_Controller_Request_Abstract $request)
  21.     {
  22.         if ($this->_auth->hasIdentity()) {
  23.             $role = $this->_auth->getIdentity()->role;//$role = $this->_auth->getIdentity()->role;
  24.         } else {
  25.             $role = 'invitado';
  26.         }
  27.  
  28.         $controller = $request->controller;
  29.         $action = $request->action;
  30.         $module = $request->module;
  31.         //$resource = $controller;
  32.         $resource="$module:$controller";
  33.  
  34.         if (!$this->_acl->has($resource)) {
  35.             $resource = null;
  36.         }
  37.  
  38.         if (!$this->_acl->isAllowed($role, $resource, $action)) {
  39.             if (!$this->_auth->hasIdentity()) {
  40.                 $module = self::NO_AUTH_MODULE;
  41.                 $controller = self::NO_AUTH_CONTROLLER;
  42.                 $action = self::NO_AUTH_ACTION;
  43.  
  44.                
  45.             } else {
  46.                 $module = self::NO_ACL_MODULE;
  47.                 $controller = self::NO_ACL_CONTROLLER;
  48.                 $action = self::NO_ACL_ACTION;
  49.             }
  50.            
  51.         }
  52.  
  53.        
  54.  
  55.         $request->setRequestUri('/index/nopermitido');
  56.         $request->setModuleName($module);
  57.         $request->setControllerName($controller);
  58.         $request->setActionName($action);
  59.         //$request->setPathInfo('/index/nopermitido');
  60.  
  61.      
  62.     }
  63. }
Saludos.
  #2 (permalink)  
Antiguo 22/02/2011, 08:55
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Problema redireccion en plugin

Si queres cambiar la url, vas a tener que usar Redirector.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 22/02/2011, 17:18
pur
 
Fecha de Ingreso: agosto-2007
Mensajes: 98
Antigüedad: 17 años, 3 meses
Puntos: 4
Respuesta: Problema redireccion en plugin

Gracias.
Le agregué el redirector y me lanza un error, me dice que tiene un bucle de redireccionamiento, no entiendo porque.
Cual sería la mejor forma de redireccionar en un plugin?
Código PHP:
Ver original
  1. if (!$this->_acl->isAllowed($role, $resource, $action)) {
  2.             if (!$this->_auth->hasIdentity()) {
  3.                 $module = self::NO_AUTH_MODULE;
  4.                 $controller = self::NO_AUTH_CONTROLLER;
  5.                 $action = self::NO_AUTH_ACTION;
  6.  
  7.                 $this->_redirector =  Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
  8.                 $this->_redirector->setGotoSimple("nopermitido","index","default");
  9.                
  10.             } else {
  11.                 $module = self::NO_ACL_MODULE;
  12.                 $controller = self::NO_ACL_CONTROLLER;
  13.                 $action = self::NO_ACL_ACTION;
  14.             }
  #4 (permalink)  
Antiguo 22/02/2011, 20:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Problema redireccion en plugin

Hola

Prueba con: void gotoUrl (string $url, [ $options = array()])
Código PHP:
Ver original
  1. return $this->_redirector->gotoUrl('/index/nopermitido');

Quitaste las ultimas lineas donde vuelves a setear action, controller, module verdad.
Saludos
  #5 (permalink)  
Antiguo 23/02/2011, 08:27
pur
 
Fecha de Ingreso: agosto-2007
Mensajes: 98
Antigüedad: 17 años, 3 meses
Puntos: 4
Respuesta: Problema redireccion en plugin

Lo solucioné de esta forma:
Código PHP:
Ver original
  1. $this->getResponse()->setRedirect('/index/nopermitido')->sendResponse();

No sé si será lo mejor para hacer una redirección desde un plugin, pero me funciona.
Cualquier solución mejor soy todo oidos.

Saludos.

Última edición por pur; 23/02/2011 a las 09:08

Etiquetas: plugin, redireccionar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:55.