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

[SOLUCIONADO] plugin y Zend_Acl

Estas en el tema de plugin y Zend_Acl en el foro de Zend en Foros del Web. Hola: Este Plugin lo que hace es obtener los roles y recursos y luego crea los permisos para almacenarlos en memoria Código PHP: class  Aclwh  ...
  #1 (permalink)  
Antiguo 20/05/2013, 09:26
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 11 meses
Puntos: 12
plugin y Zend_Acl

Hola:

Este Plugin lo que hace es obtener los roles y recursos y luego crea los permisos para almacenarlos en memoria
Código PHP:
class Aclwh extends Zend_Controller_Plugin_Abstract
{
    public function 
preDispatch(Zend_Controller_Request_Abstract $request) {    
        
$acl = new Zend_Acl();
        
$menus = new MenuRepository();
        
$menus $menus->getMenuacl();
        for(
$i $i count($menus); $i++ ){
            
$acl->addResource(new Zend_Acl_Resource($menus[$i]['module']));
        }
        
$roles = new RolesRepository();
        
$roles $roles->getRolesacl();
        for(
$i $i count($roles); $i++ ){
            
$acl->addRole(new Zend_Acl_Role($roles[$i]['name']));
        }
        
$rolresource = new PermisosRepository();
        
$rolresource $rolresource->getRoleresourceacl();
        for(
$i $i count($rolresource); $i++ ){
            
$acl->allow($rolresource[$i]['role_name'], $rolresource[$i]['resource_name']);
            
        }
//         return  $acl->isAllowed('logistic', 'menu') ? 'si' : 'no';
        
return $acl;
    }

Basicamente en el predispatch del controlador obtengo el rol al que pertenece el usuario autenticado, si el usario tiene permiso entonces que imprima si de lo contrario no en este código:
Código PHP:
    public function preDispatch() {
        
$auth Zend_Auth::getInstance();
        
$role = new HistousuarioRepository();
        
$id $auth->getIdentity();
        
$role $role->getRole($id['id']);
        
$module $this->getRequest()->getModuleName();
        
$acl = new ApplicationHelpersAclwh();
         echo 
$acl->isAllowed($role$module) ? 'si' 'no';
        if (! 
$auth->hasIdentity() ) {
            return 
$this->_redirect('/login');
        }
    } 
Pero me muestra este mensaje

Fatal error: Call to undefined method Application\Helpers\Aclwh::isAllowed() in C:\xampp\htdocs\bcbtram\application\modules\menu\c ontrollers\IndexController.php on line 95

y con justa razon, intente que me devolviera true y false, pero tampoco funciona, cómo haría para que me devuelva el resultado? o mejor aún si existe otra forma de realizar los permisos.
  #2 (permalink)  
Antiguo 20/05/2013, 09:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: plugin y Zend_Acl

Pues faltaría ver que es lo que hace tu clase ApplicationHelpersAclwh para ver porque es que no te devuelve ya que no muestras su estructura ni nada.

Saludos.
  #3 (permalink)  
Antiguo 20/05/2013, 09:38
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 11 meses
Puntos: 12
Respuesta: plugin y Zend_Acl

La clase a la que te refieres es el primer código php, y el nombre real sería, $acl = new \Application\Helpers\Aclwh();
  #4 (permalink)  
Antiguo 20/05/2013, 09:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: plugin y Zend_Acl

Un Controller Plugin no se debe de usar así, ya que el ciclo del frontController hace uso de partes del controller plugin en cada etapa.

Lo que debes de hacer en este caso es guardar el $acl que generaste en tu plugin, en el registro de Zend o algún lado donde lo puedas consumir en las otras partes de tu aplicación.

Saludos.
  #5 (permalink)  
Antiguo 20/05/2013, 12:28
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 11 meses
Puntos: 12
Respuesta: plugin y Zend_Acl

Gracias esto solucionó mi problema

\Zend_Registry::set('acl', $acl);

Etiquetas: plugin
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 23:26.