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

Cierto, yo pensaba que intentaba entrar en el action crear del controlador propuesta del modulo tematica (segun el ejemplo que puse en el primer mensaje)

entonces al no tener permiso intenta entrar en: default/error/

y al no indicar el action, si intentamos entrar en tematica/propuesta/index

iria a: default/error/index (por eso no daba problemas, esa vista si existía)

y si queremos entrar en tematica/propuesta/crear, daba error porque queria entrar en: default/error/crear y daba el error de que no existia la vista.

Al final añadimos el action en el 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');
            [
B]$request->setActionName('index');[/B]
        }
 
    }
}