Tema: Zend_Acl
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/05/2010, 07:41
wigglyUtrera
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: Zend_Acl

Si claro, un plugin:

Código PHP:
<?php

/*
 * AuthorizationPlugin.php
 * Extensión de la clase Zend_Controller_Plugin_Abstract
*/
class My_AuthorizationPlugin extends Zend_Controller_Plugin_Abstract
{
    private 
$_auth;
    private 
$_acl;
 
    public function 
__construct(Zend_Auth $authZend_Acl $acl)
    {
            
$this->_auth $auth;
            
$this->_acl $acl;
    }
 
    public function 
preDispatch Zend_Controller_Request_Abstract $request )
    {
        
        
$datos $this->_auth->getStorage()->read();
        
$role $datos[1];
        if(
$role === null)
            
$role 'anonimo';
        
        
        if( 
$this->_acl->has$this->getRequest()->getActionName() ) )
            
$resource $this->getRequest()->getActionName();
        elseif( 
$this->_acl->has$this->getRequest()->getControllerName() ) )
            
$resource $this->getRequest()->getControllerName();
        elseif( 
$this->_acl->has$this->getRequest()->getModuleName() ) )
            
$resource $this->getRequest()->getModuleName();
        

        if ( !
$this->_acl->isAllowed($role$resource) && $role == 'anonimo' )
        {
            
$request->setModuleName('default');
            
$request->setControllerName('index');
        }
        elseif (!
$this->_acl->isAllowed($role$resource) )
        {
            
$request->setModuleName('default');
            
$request->setControllerName('error');
        }
 
    }
}
y esta registrado en el Bootstrap. lo que comentaba, algunas veces funciona bien (cuando se pone solo hasta el nombre del controlador), pero no funciona si se pone el nombre del action y no tiene permisos para entrar (Si el rol tiene permiso, funciona siempre correctamente)

Gracias

Un saludo