Tema: Zend_Acl
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/01/2011, 09:26
jcq_quiroz
 
Fecha de Ingreso: septiembre-2010
Mensajes: 111
Antigüedad: 14 años, 2 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.