Tema: Zend_Acl
Ver Mensaje Individual
  #16 (permalink)  
Antiguo 18/01/2011, 09:31
jcq_quiroz
 
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