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

Zend_Acl

Estas en el tema de Zend_Acl en el foro de Zend en Foros del Web. hola como estan estoy tratando de hacer Autenticacion y permisos de usuarios con Zend_Acl, mi proyecto esta dividido por modulos administrador, default y ventas, mi ...
  #1 (permalink)  
Antiguo 12/01/2011, 09:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Zend_Acl

hola como estan estoy tratando de hacer Autenticacion y permisos de usuarios con Zend_Acl, mi proyecto esta dividido por modulos administrador, default y ventas, mi duda es no se como hacer los Zend_Acl_Resource para modulo controlador action y como dar permisos a los recurso, la libreria es la siguinete
Código PHP:
class Model_LibreriaAcl extends Zend_Acl {

    public function 
__construct() {


        
//Roles 
        
$this->addRole(new Zend_Acl_Role('default'));
        
$this->addRole(new Zend_Acl_Role('almacen'),'default');
        
$this->addRole( new Zend_Acl_Role('administrador'));
        
$this->addRole(new Zend_Acl_Role('ventas'));
        

        
        
/*
         * Recursos para el module default y sus controladores
         */
        
        
$this->add(new Zend_Acl_Resource('default'));
        
$this->add(new Zend_Acl_Resource('default:index'));
        
$this->add(new Zend_Acl_Resource('default:error'));
        
$this->add(new Zend_Acl_Resource('default:Autentificacion'));
        
        
/*
         * Recursos para el Modulo Administrador y sus controladores
         */

        
$this->add(new Zend_Acl_Resource('administrador'));
        
$this->add(new Zend_Acl_Resource('administrador:Index'));

        
/*
         * Recursos para el Modulo Ventas y sus controladores
         */
        
$this->add(new Zend_Acl_Resource('ventas'));
        
$this->add(new Zend_Acl_Resource('ventas:Index'));

        



        
/*
         * Permisos para el rol default recursos, action
         */
        
$this->allow('default','default:index','index');
        
$this->allow('default','default:Autentificacion','login');
        
$this->allow('default','default:error','error');
        
        
$this->allow('almacen','almacen:Index','index');
        
$this->allow('ventas','ventas:Index','index');
        
$this->allow('administrador','administrador:Index','index'); 
por favor me pueden decir si estoy en lo correcto o cual es la forma correcta de hacer y dar permisos como Modulo/Controlador/Action,
estare agradecido saludos porfavor ayudenme
  #2 (permalink)  
Antiguo 12/01/2011, 09:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Zend_Acl

Hay varias formas de hacerlo, yo en particular uso la convención module:controller, todo en lowercase y luego en mi plugin verifico:
Código PHP:
Ver original
  1. $sController = $Request->getControllerName();
  2. $sModule = $Request->getModuleName();
  3.  
  4. $sResource = $sModule . ':' . $sController;
  5.  
  6. if (!$Acl->isAllowed($Role, $sResource, 'view')) {
  7. $this->_redirectToLogin($Request, 'Please Login');
  8. }

Saludos.
  #3 (permalink)  
Antiguo 13/01/2011, 06:58
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

una pregunta no soy tan bueno en zend en tu ejemplo

if (!$Acl->isAllowed($Role, $sResource, 'view')) {

$this->_redirectToLogin($Request, 'Please Login');

}

'view' seria la accion del modulo:controlador que esta en la libreria ACL como este:
$this->add(new Zend_Acl_Resource('module:controller));
y en los permisos serias asi

$this->allow('rol','modulo:controller','accion');

por corrigeme si estoy equivocado, gracias
  #4 (permalink)  
Antiguo 13/01/2011, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Zend_Acl

Así es, hay un $this->allow($rol, 'modulo:controller', 'view');

Saludos.
  #5 (permalink)  
Antiguo 14/01/2011, 09:26
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

por favor ayudenme como dije recien aprendo zend, tengo los siguientes problemas al utilizar zend_Acl y Zend_Auth, mi proyecto esta dividido en los siguientes modulos
1. default
2. almacen
3. administrador

para que un usuario acceda a ciertos niveles restrinjo de la siguiente manera con una libreria Zend_Acl
Código PHP:
class Model_LibreriaAcl extends Zend_Acl {

    public function 
__construct() {


        
//Roles
        
$this->addRole(new Zend_Acl_Role('default'));
        
$this->addRole(new Zend_Acl_Role('almacen'));
        
$this->addRole( new Zend_Acl_Role('administrador'));
        
$this->addRole(new Zend_Acl_Role('ventas'));



        
/*
         * Recursos para el module default y sus controladores
         */

        
$this->add(new Zend_Acl_Resource('DEFAULT'));
        
$this->add(new Zend_Acl_Resource('DEFAULT:INDEX'));
        
$this->add(new Zend_Acl_Resource('DEFAULT:ERROR'));
        
$this->add(new Zend_Acl_Resource('DEFAULT:AUTENTIFICACION'));

        
/*
         * Recursos para el Modulo Administrador y sus controladores
         */

        
$this->add(new Zend_Acl_Resource('ADMINISTRADOR'));
        
$this->add(new Zend_Acl_Resource('ADMINISTRADOR:INDEX'));
        
$this->add(new Zend_Acl_Resource('ADMINISTRADOR:ERROR'));



        
/*
         * Recursos para el Modulo Almacen y sus controladores
         */
        
$this->add(new Zend_Acl_Resource('ALMACEN'));
        
$this->add(new Zend_Acl_Resource('ALMACEN:INDEX'));
        
$this->add(new Zend_Acl_Resource('ALMACEN:ERROR'));




        
/*
         * Recursos para el Modulo Ventas y sus controladores
         */
        
$this->add(new Zend_Acl_Resource('VENTAS'));
        
$this->add(new Zend_Acl_Resource('VENTAS:INDEX'));
        
$this->add(new Zend_Acl_Resource('VENTAS:ERROR'));


        
/*
         * Permisos para el rol default recursos, action
         */
        
$this->allow('default','DEFAULT:INDEX','INDEX');
        
$this->allow('default','DEFAULT:AUTENTIFICACION','LOGIN');
        
$this->allow('default','DEFAULT:ERROR','ERROR');
        
        
$this->allow('almacen','ALMACEN:INDEX','INDEX');
        
$this->allow('almacen','ALMACEN:ERROR','ERROR');

        
$this->allow('administrador','ADMINISTRADOR:INDEX','INDEX');
        
$this->allow('administrador','ADMINISTRADOR:ERROR','ERROR');

        
$this->allow('ventas','VENTAS:INDEX','INDEX');

        
//$this->allow(null,'ERROR');



        
    
}


y verifico con un pluguin q lo llamo en el bootstrap
Código PHP:
protected function _initAutoLoad() {
        
$modelLoader = new Zend_Application_Module_Autoloader(array(
                    
'namespace' => '',
                    
'basePath' => APPLICATION_PATH ''));
        if (
Zend_Auth::getInstance()->hasIdentity()){
            
Zend_Registry::set('role'Zend_Auth::getInstance()->getStorage()->read()->NOM_TIPO_EMP);
            
        }else {
            
Zend_Registry::set('role''default');
        }
        
$this->_acl = new Model_LibreriaAcl();

        
$this->_auth Zend_Auth::getInstance();

        
$fc Zend_Controller_Front::getInstance();
        
$fc->registerPlugin(new Plugin_VerificarAcceso($this->_acl$this->_auth));

        return 
$modelLoader;
    } 
y el plugin es el siguiente
Código PHP:
class Plugin_VerificarAcceso extends Zend_Controller_Plugin_Abstract {

    private 
$_acl null;
    private 
$_auth=null;

    public function 
__construct(Zend_Acl $acl,  Zend_Auth $auth) {
        
$this->_acl $acl;
        
$this->_auth $auth;
    }

   


   public function 
preDispatch(Zend_Controller_Request_Abstract $request) {
      
$module strtoupper($request->getModuleName());
      
$controller strtoupper($request->getControllerName());
      
$action strtoupper($request->getActionName());
    
      if (
Zend_Auth::getInstance()->hasIdentity()){
          
$rol=Zend_Auth::getInstance()->getStorage()->read()->NOM_TIPO_EMP;

      }else {
          
$rol='default';
      }
      
$resource=$module.':'.$controller;
     
     if(!
$this->_acl->isAllowed($rol,$resource$action)){
          
          
$request->setModuleName('default');
          
$request->setControllerName('Autentificacion');
          
$request->setActionName('login');
           
      }
      

      
     } 


y la forma de autenticar es la siguiente
Código PHP:
public function loginAction() {
        
        
$this->view->title 'Login';
       if (
Zend_Auth::getInstance()->hasIdentity()) {
            
$this->_redirect('Autentificacion/login');
        }
        
$request $this->getRequest();
        
$form = new Form_Login();
        if (
$request->isPost()) {
            if (
$form->isValid($this->_request->getPost())) {
                
$authAdapter $this->getAuthAdapter();
                
$login_usr $form->getValue('login_usr');
                
$password_usr $form->getValue('password_usr');
                
$authAdapter->setIdentity($login_usr)
                        ->
setCredential($password_usr);
                
$auth Zend_Auth::getInstance();
                
$result $auth->authenticate($authAdapter);
                if (
$result->isValid()) {
                    
$datos_empleado $authAdapter->getResultRowObject(null,'PASSWORD_EMPLEADO');
                    
$authStorage $auth->getStorage();
                    
$rol=$authStorage->read()->NOM_TIPO_EMP;
                    
$authStorage->write($datos_empleado);
                    
$this->_redirect('almacen/index/index');
                    
//$this->_helper->Redirector->gotoSimple('index', 'index', 'almacen');
                
} else {
                    
$this->view->errorMessage "Login o Password no son Validos !!!!!!";
                }
            }
        }


        
$this->view->form $form;
    } 
mi pregunta es la siguiente: como redirecciono una vez autenticado por el usuario, por ejemplo el usuario tiene acceso al modulo almacen a totos sus controladores, yo lo redireccionaba un ves autenticado con.
$this->_redirect('almacen/index/index');
pero cuando verifica si tiene permiso o no ese usuario con su rol, es como si no redireccionara, no se como hacer ayudenme por favor, o donde se redirecciona al modulo/controller/acction.
  #6 (permalink)  
Antiguo 14/01/2011, 09:40
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

Estas seguro que pasa el isAllowed ?, lo comprobaste ?, deberías estar debugeando con algún IDE(netbeans + xdebug) o bien a mano(a base de Zend_Debug::dump).
  #7 (permalink)  
Antiguo 17/01/2011, 06:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

ya no se como hacer o como comprovar, una vez autenticado, y verificar si es valido el usuario que se loguea no redirecciona al module/controller/action lo hice con
$this->_redirect('almacen/index/index');
pero si no verifico, o no llamo al script para ver si tiene o no permiso, redirecciona correctamente, enque me estoy equivocando o donde debo redireccionar, una vez autenticaco, por favor ayudenme les estare agradcidos gracias saludos.
  #8 (permalink)  
Antiguo 17/01/2011, 06:58
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

No te estas explicando claramente y eso dificulta que te podamos ayudar, el problema es que no redirecciona al logearte ? o que redirecciona siempre al login ?, te comento que el _redirect de loginAction deberia ser simplemente _redirect('/almacen') y si el error es en el plugin debugea el rol, resource y action, algo asi:

Código PHP:
Ver original
  1. ...
  2. $resource = $module . ':' . $controller;
  3. Zend_Debug::dump($rol);
  4. Zend_Debug::dump($resource);
  5. Zend_Debug::dump($action);
  6. ....

y comproba que estén bien los datos.
  #9 (permalink)  
Antiguo 17/01/2011, 07:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

tengo una duda mas por favor quisiera que me ayuden, mi duda es la siguiente, me autentico y con el plugin verifico si tengo permisos o no
este es plugin para verificar si tengo permiso o no
Código:
if(!$this->_acl->isAllowed($rol,$resource, $action)){
          
          $request->setModuleName('default');
          $request->setControllerName('index');
          $request->setActionName('index');
           
      }
en el navegador esta en el controller Autenticacion y la action login como sigue.
http://localhost/ProyectoFinal/public/Autentificacion/login
pero si no esta permitido el request lo modifico como se muestra en el anterior, entra al if modifica el request pero no se cambia en el navegador para redireccionar a eso module/controller/action
sigue como estaba antes, como se hace para q en el navegador mas cambie pq obtiene de ahi el request ayudenme porfavor gracias de antemano saludos
  #10 (permalink)  
Antiguo 17/01/2011, 08:15
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

verifique como me dijiste con Zend_Debug::dump();
el $rol esta bien, lo q parece que en loginAction _Redirect(/almacen) no esta redireccionando,
cuando un Zend_Debug::dump($resource); el resultado es que sigue el modulo default:Autentificacion el problema es que parece q no esta redireccionando, donde es el error aparentemente todo esta bien ayudame porfavor. o si tienes un ejemplo completo te estare agradecido, gracias por la ayuda
  #11 (permalink)  
Antiguo 17/01/2011, 08:46
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

A ver, primero, que no cambie la url no quiere decir que no redireccione, si lo que queres es que cambie la url deberias utilizar redirector, algo asi:

Código PHP:
Ver original
  1. ...
  2. if(!$this->_acl->isAllowed($rol,$resource, $action)) {
  3.    $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
  4.    $redirector->gotoUrl('/default');
  5. }
  6. ...

segundo en loginAction tenes esto:

Código PHP:
Ver original
  1. ...
  2. if (Zend_Auth::getInstance()->hasIdentity()) {
  3.    $this->_redirect('Autentificacion/login');
  4. }
  5. ...

osea si estas logeado y por casualidad accedes a login, entras en un loop infinto, si esta logeado deberia ir a un panel de usuario o al index.

tercero si siempre te envía al login es porque por alguna razón no pasa el acl.

Saludos.
  #12 (permalink)  
Antiguo 17/01/2011, 09:54
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

Gracias, ya lo prove no me redirecciona me da el siguiente error
Cita:
Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in C:\xampp\htdocs\ProyectoFinal\application\models\L ibreriaAcl.php, line 50' in C:\xampp\htdocs\zframework\library\Zend\Controller \Response\Abstract.php:321 Stack trace: #0 C:\xampp\htdocs\zframework\library\Zend\Controller \Response\Abstract.php(148): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 C:\xampp\htdocs\zframework\library\Zend\Controller \Action\Helper\Redirector.php(223): Zend_Controller_Response_Abstract->setRedirect('/ProyectoFinal/...', 302) #2 C:\xampp\htdocs\zframework\library\Zend\Controller \Action\Helper\Redirector.php(367): Zend_Controller_Action_Helper_Redirector->_redirect('/ProyectoFinal/...') #3 C:\xampp\htdocs\zframework\library\Zend\Controller \Action\Helper\Redirector.php(450): Zend_Controller_Action_Helper_Redirector->setGotoUrl('/default/Autent...', Array) #4 C:\xampp\htdocs\ProyectoFinal\application\plugins\ VerificarAcceso.php(42): Zend_Controller_Action_Helpe in C:\xampp\htdocs\zframework\library\Zend\Controller \Response\Abstract.php on line 321
pregunta, porque no me redirecciona cuando me logueo y ese usuario tiene permiso para entrar a ese modulo no me redirecciona el codigo q utilizo para redireccionar es el siguiente
Cita:
if ($result->isValid()) {
$datos_empleado = $authAdapter->getResultRowObject(null,'PASSWORD_EMPLEADO');
$authStorage = $auth->getStorage();
$rol=$authStorage->read()->NOM_TIPO_EMP;
$authStorage->write($datos_empleado);
$this->_redirect('/almacen');

}
ese usuario tiene todos los permisos en el modulo almacen, no redirecciona a ese modulo no cambia la url sigue estando lo del default, haciendo zend_debub::dump($module); me arroja el default pero en teoria deberia ser almacen, por favor ayudenme a salir de este problema gracias
  #13 (permalink)  
Antiguo 17/01/2011, 10:33
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

El error es algo que no tiene nada que ver con redirector, si buscas en el foro o googleas vas a encontrar info sobre el mismo.

Dudo que no funcione _redirect, para comprobarlo, agrega un die debajo del mismo, algo asi:

Código PHP:
Ver original
  1. ...
  2. $this->_redirect('/almacen');
  3. die('NO_REDIRECT');
  4. ...

Si _redirect realmente no esta funcionando deberías ver el mensaje, en caso de que este bien nunca lo vas a ver, otra pregunta, tenes configurado el vhost y mod_rewrite activado?
  #14 (permalink)  
Antiguo 18/01/2011, 07:45
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

gracias por la respuesta, lo probe el die('NO_REDIRECTOR') y no me mustra nada entonces como dices entoces el _Redirect('/almacen') de loginAction, esta redireccionando, ahora estoy mas desconcertado , si esta redireccionando entonces, porque no va al modulo almacen, mi pregunta es donde me estoy equivocando en el escript que verifica si tengo permisos o no, o en la libreria donde estan los permisos , sera que lo puedo subir todas las clases que utilizo, autenticacion y los permisos, con respecto al vhost lo tengo configurado y mod_rewrite lo tengo activado esto trae algun conlicto, ayudenme porfa, saludos gracias

Última edición por jcq_quiroz; 18/01/2011 a las 08:21
  #15 (permalink)  
Antiguo 18/01/2011, 08:50
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

El problema es como te comente antes que no pasa el isAllowed, si comentas el plugin funciona correctamente ? lo mas probable es que si, así que tenes que debugear el acl y el plugin porque te esta devolviendo todo el tiempo que no tenes permiso para la acción que estas solicitando.
  #16 (permalink)  
Antiguo 18/01/2011, 09:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

gracias por la respuesta, si cuando lo comento el script funciona muy bien, pero con el script me da eroor como dices como si no tuviera permisos, pero el mi libreria tengo el permiso de ir por lo menos al index de ese modulo, estoy debug el acl y el script con zend_debug::dump() y no como ya detectar el problema , por favor te enviare mi codigo de la libreria y el pluguin haber si se me escapo algo.
este es la clase libreria de permisos
Código PHP:
class Model_LibreriaAcl extends Zend_Acl {

    public function 
__construct() {

        
$this->addRole(new Zend_Acl_Role('default'));
        
$this->addRole(new Zend_Acl_Role('almacen'));
        
$this->addRole(new Zend_Acl_Role('administrador'));

        
/*
         * Resource para el modulo Default Module/Controller
         *
         * Zend_Acl_Resource('module:controller')
         *
         */
        
$this->add(new Zend_Acl_Resource('DEFAULT'));
        
$this->add(new Zend_Acl_Resource('DEFAULT:INDEX','INDEX'));
        
$this->add(new Zend_Acl_Resource('DEFAULT:ERROR','ERROR'));
        
$this->add(new Zend_Acl_Resource('DEFAULT:AUTENTIFICACION','LOGIN'));

        
/*
         * Recursos para el modulo Almacen Module/Controller
         * Zend_Acl_Resource('module:controller')
         */
        
$this->add(new Zend_Acl_Resource('ALMACEN'));
        
$this->add(new Zend_Acl_Resource('ALMACEN:INDEX','INDEX'));



        
/*
         * Permisos para el modulo Default
         */
        
$this->allow('default''DEFAULT:INDEX''INDEX');
        
$this->allow('default''DEFAULT:ERROR''ERROR');
        
$this->allow('default''DEFAULT:AUTENTIFICACION''LOGIN');
        
/*
         * Permisos para el modulo Almacen
         */

        
$this->allow('almacen','ALMACEN:INDEX','INDEX');

        
/*
         * 
         */
    

en el resource utilizo 'modulo:controller', 'action';

este el plugin q utilizao para verificar si tengo o no permisos
Código PHP:
class Plugin_VerificarAcceso extends Zend_Controller_Plugin_Abstract {
private 
$_acl null;

    public function 
__construct(Zend_Acl $acl) {
        
$this->_acl $acl;
    }

    public function 
preDispatch(Zend_Controller_Request_Abstract $request) {
       
//Zend_Debug::dump($request);
        
$module strtoupper($request->getModuleName());
        
$controller strtoupper($request->getControllerName());
        
$action strtoupper($request->getActionName());
        
$resource=$module.':'.$controller;

        if (
Zend_Auth::getInstance()->hasIdentity()) {
            
$rolZend_Auth::getInstance()->getStorage()->read()->NOM_TIPO_EMP;
        } else {
            
$rol='default';
        }
        
Zend_Debug::dump($rol);
        
Zend_Debug::dump($resource);
        
Zend_Debug::dump($action);
        
//Zend_Debug::dump(!$this->_acl->isAllowed($rol, $resource, $action));
        
         
        

        
if(!$this->_acl->isAllowed($rol$resource$action)){
            
$request->setModuleName('default');
            
$request->setControllerName('Autentificacion');
            
$request->setActionName('login');
        }
    }

aqui es donde ago los debug.

Este la configuracion de mi bootstrap
Código PHP:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    protected function 
_initAutoLoad() {
        
$modelLoader = new Zend_Application_Module_Autoloader(array(
                    
'namespace' => '',
                    
'basePath' => APPLICATION_PATH ''));
        if (
Zend_Auth::getInstance()->hasIdentity()) {
            
Zend_Registry::set('role'Zend_Auth::getInstance()->getStorage()
                                    ->
read()->NOM_TIPO_EMP);
        } else {
            
Zend_Registry::set('role''default');
        }

          
$this->_acl = new Model_LibreriaAcl();
          
$this->_auth Zend_Auth::getInstance();

          
$fc Zend_Controller_Front::getInstance();
          
$fc->registerPlugin(new Plugin_VerificarAcceso($this->_acl));
        return 
$modelLoader;
    }

    protected function 
_initPlugins() {


        
$this->bootstrap('frontController');
        
$plugin = new Plugin_VariosLayout();
        
$this->frontController->registerPlugin($plugin);
    }

    function 
_initViewHelpers() {
        
$this->bootstrap('layout');
        
$layout $this->getResource('layout');
        
$layout Zend_Layout::getMVCInstance();
        
$layout->setLayout('layout');
    }



y este es el controller la action login la forma como me logueo
Código PHP:
public function loginAction() {
        
        
$this->view->title 'Login';
       if (
Zend_Auth::getInstance()->hasIdentity()) {
            
$this->_redirect('/almacen');
        }
        
$request $this->getRequest();
        
$form = new Form_Login();
        if (
$request->isPost()) {
            if (
$form->isValid($this->_request->getPost())) {
                
$authAdapter $this->getAuthAdapter();
                
$login_usr $form->getValue('login_usr');
                
$password_usr $form->getValue('password_usr');
                
$authAdapter->setIdentity($login_usr)
                        ->
setCredential($password_usr);
                
$auth Zend_Auth::getInstance();
                
$result $auth->authenticate($authAdapter);
                
                if (
$result->isValid()) {
                    
$datos_empleado $authAdapter->getResultRowObject(null,'PASSWORD_EMPLEADO');
                    
$authStorage $auth->getStorage();
                    
$rol=$authStorage->read()->NOM_TIPO_EMP;
                    
$authStorage->write($datos_empleado);
                    
$this->_redirect('/almacen');
         
                    die(
'NO_REDIRECT');
                } else {
                    
$this->view->errorMessage "Login o Password no son Validos !!!!!!";
                }
            }
        }


        
$this->view->form $form;
    }

    

    private function 
getAuthAdapter() {
        
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
        
$authAdapter->setTableName('EMPLEADO')
                ->
setIdentityColumn('LOGIN_EMPLEADO')
                ->
setCredentialColumn('PASSWORD_EMPLEADO');

        return 
$authAdapter;
    } 

estos son las clases q utilizo, por favor nose enque esta mal, nose enque me equivoco ya no tengo cabeza, no se como solucionar el problema, porfavor una manito, les estare agradecido
  #17 (permalink)  
Antiguo 18/01/2011, 10:46
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

A ver, estas seguro que tiene el rol adecuado ?, porque después de autenticar no haces ningún tipo de distinción segun el rol para redirigir, envías directamente al modulo almacen y tal cual tenes tu acl solo van a acceder a ese modulo los empleados con el rol almacen, si no tiene este rol el usuario, otra vez al login.
  #18 (permalink)  
Antiguo 19/01/2011, 07:54
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

gracias por la respuesta, eso solo era para hacer pruebas el modulo en si esta relacionado con el rol de cada usuario, ejemplo si el rol de usuario es almacen solo acede al modulo almacen, si es admin solo accede al modulo almacen, entonces en el _redirect($rol), ese rol es obtenido del usuario logueado.
una pregunta las clases que lo subi estan correctos o me estoy equivocando en algo por favor corrigeme si estoy equivocado.
tengo otra duda mas por favor ayudame, verificando con el Zend_Debug::dump('NO_REDIRECT') como de dijiste, si no muestra esta redireccionando, no muestra nada entonces esta redireccionando el redirect del loginController _redirect(/module), module puede ser almacen, admin, etc.
si esta redireccionando en el navegador de la url deve cambiar no?, en este caso no cambia la url del navegador se queda en la Autenticacion:
http://localhost/ProyectoFinal/public/autentificacion/login. o no siempre cambia, porque si desabilito el plugin cambia la url a:
http://localhost/ProyectoFinal/public/almacen

porque en el script el metodo
public function preDispatch(Zend_Controller_Request_Abstract $request)
lo obtiene de la URL eso verifique, los $modules, action, controller que se obtine del $request son los estan en ese momento en la url, si al hacer _redirect(/module) redirecciona y no cambia la url ahi es donde tengo el error,
eso es posible ayudame porfavor gracias de antemano
  #19 (permalink)  
Antiguo 19/01/2011, 09:41
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

Cita:
una pregunta las clases que lo subi estan correctos o me estoy equivocando en algo por favor corrigeme si estoy equivocado.
Mal, creo que no esta, lo que deberias darle permisos al rol almacen para acceder al error controller.
Cita:
si esta redireccionando en el navegador de la url deve cambiar no?
La url deberia cambiar siempre que el login sea correcto, solo que en el caso de no tener los permisos la vista seria la del login y no la del index de almacen, a lo que te pregunto el login es correcto ?, se guardan en session correctamente los datos ?, en en un post anterior te pregunte si tenias el vhost configurado y me dijiste que si, porque accedes de esta forma a la aplicación ?

http://localhost/ProyectoFinal/publi...ficacion/login

debería ser algo así:

http://myapp.local/default/autentificacion/login
__________________
http://es.phptherightway.com/
thats us riders :)
  #20 (permalink)  
Antiguo 20/01/2011, 09:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

con respecto a los permisos, ya le di permisos al modulo almacen para que pueda acceder al Error Controller, no cambia nada sigue el problema eso afecta mucho.
con respecto si el login es correcto la Url deberia cambiar?
el login si es correcto lo verifico en el controller Autentificacion loginAction, y si esta correcto, si esta correcto lo redirecciono con el _redirect($modulo) si no lo esta le mando un mensaje de error.
los datos del usuario logueado si es correcto lo guardo con zend_Auth de la siguiente
Código:
$datos_empleado = $authAdapter->getResultRowObject(null, 'PASSWORD_EMPLEADO');
                    $authStorage = $auth->getStorage();
                    $authStorage->write($datos_empleado);
                    $rol = $authStorage->read()->NOM_TIPO_EMP;
                    $this->_redirect('/'.$rol);
y lo verifico si es correcto los datos guardados en la sesion con
Zend_Debug::dump(Zend_Auth::getInstance()->getStorage()->read());
y si es correcto, hay otra forma de verificar si es correcto los datos o donde hay que verificar si es correcto.

mi vhost esta habilitado la forma que llamo por la Url es:
http://www.sistema.com/
si es correcto el loguin lo redirecciono con _redirect($module) y laUrl deberia cambiar no? a http://www.sistema.com/almacen pero no cambia se queda en
http://www.sistema.com/Autenticacion/login que es el controlador del module default, no se donde es el error, ya me canse de hacer si tienes ejemplos porfavor ayudame gracias
  #21 (permalink)  
Antiguo 20/01/2011, 09:30
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

Comprimi el proyecto y hostealo en algún lado que lo descargo y miro.
__________________
http://es.phptherightway.com/
thats us riders :)
  #22 (permalink)  
Antiguo 20/01/2011, 09:53
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Zend_Acl

gracias por la respuesta, sera que te lo puedo mandar a tu correo por favor porque no se donde subirlo para que lo puedas desacargar
  #23 (permalink)  
Antiguo 20/01/2011, 10:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Zend_Acl

Te mando un MP. Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
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 20:32.