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

Autorización con Zend_Acl

Estas en el tema de Autorización con Zend_Acl en el foro de Zend en Foros del Web. Hola amigos que tal. Maravilloso el mundo de ZendFramework cierto , pero tengo una duda pequeña pero no he podido resolverla ni leyendo la documentación ...
  #1 (permalink)  
Antiguo 10/07/2012, 11:46
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Autorización con Zend_Acl

Hola amigos que tal.

Maravilloso el mundo de ZendFramework cierto , pero tengo una duda pequeña pero no he podido resolverla ni leyendo la documentación de este link http://manual.zfdes.com/es/zend.acl....tion.resources

por que en la documentación oficial no se que le pasa...

En fín. Les cuento.

Suponiendo 2 controladores cuyas acciones se llaman igual

Controlador Customer | Controlador Employee

Ambos tiene acciones llamadas : add, edit

¿Por qué no me funciona cuando hago esto ?

Código PHP:
Ver original
  1. $this->add(new Zend_Acl_Resource('customer'));
  2.         $this->add(new Zend_Acl_Resource('add'), 'customer');
  3.         $this->add(new Zend_Acl_Resource('edit'), 'customer');
  4.  
  5. $this->add(new Zend_Acl_Resource('employee'));
  6.         $this->add(new Zend_Acl_Resource('add'), 'employee');
  7.         $this->add(new Zend_Acl_Resource('edit'), 'employee');
  8.  
  9. $this->addRole(new Zend_Acl_Role(6));
  10.  $this->addRole(new Zend_Acl_Role(5),6);
  11.  
  12. $this->allow(5,'employee','add');
  13. $this->allow(5,'employee','edit');
  14.  
  15. $this->allow(5,'customer','edit');
  16. $this->allow(5,'customer','add');

Me he dado cuenta que si las acciones se repiten es cuando dan el problema, por ejemplo si cambio de nombre a los actions de alguno de los controllers de tal manera que quedase así:

Código PHP:
Ver original
  1. $this->add(new Zend_Acl_Resource('customer'));
  2.         $this->add(new Zend_Acl_Resource('add'), 'customer');
  3.         $this->add(new Zend_Acl_Resource('edit'), 'customer');
  4.  
  5. $this->add(new Zend_Acl_Resource('employee'));
  6.         $this->add(new Zend_Acl_Resource('agregar'), 'employee');
  7.         $this->add(new Zend_Acl_Resource('editar'), 'employee');
  8.  
  9. $this->addRole(new Zend_Acl_Role(6));
  10.  $this->addRole(new Zend_Acl_Role(5),6);
  11.  
  12. $this->allow(5,'employee','agregar');
  13. $this->allow(5,'employee','editar');
  14.  
  15. $this->allow(5,'customer','edit');
  16. $this->allow(5,'customer','add');

Entonces todo correcto.

El error del que les hablo el servidor lo responde como: Error HTTP 500 (Internal Server Error)

Les agradezco mucho la ayuda. Saludos
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #2 (permalink)  
Antiguo 10/07/2012, 12:01
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Autorización con Zend_Acl

Es extraño que te genere un ISE, lo que si debería generar es una excepción porque intentas agregar un recurso con identificar repetido(add/edit), tienes el env en development ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 10/07/2012, 12:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Autorización con Zend_Acl

Recuerda que Zend tiene explicitamente un manejo de permisos para ello:
Código PHP:
Ver original
  1. <?php
  2. $Acl = new Zend_Acl();
  3.  
  4. $Acl->addResource(new Zend_Acl_Resource('customer'));
  5. $Acl->addResource(new Zend_Acl_Resource('employee'));
  6.  
  7. $Cust = new Zend_Acl_Role('customer');
  8. $Employee = new Zend_Acl_Role('employee');
  9.  
  10. $Acl->addRole($Cust);
  11. $Acl->addRole($Employee, $Cust);
  12.  
  13. $Acl->allow('customer', 'customer', 'view');
  14. $Acl->allow('employee', 'customer', array('add', 'edit')); // view es "heredado"
  15.  
  16. var_dump($Acl->isAllowed($Cust, 'customer', 'view'));
  17. var_dump($Acl->isAllowed($Employee, 'customer', 'view'));
  18.  
  19. var_dump($Acl->isAllowed($Cust, 'customer', 'add'));
  20. var_dump($Acl->isAllowed($Employee, 'customer', 'add'));
  #4 (permalink)  
Antiguo 10/07/2012, 12:31
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Autorización con Zend_Acl

Ah Ahora sí funciona jejeje.

Si yo también esperaba alguna excepción... sería útil pero ... curioso que lo comentes . Cada vez que cometo algún error en ZendFramework el servidor me responde un HTTP 500 en lugar de excepciones y si me parecía que debía aparecer exceptions pero como nunca las ví me acostumbre a trabajar sin ellas.

Como puedo configurar para que me aparezcan las exceptions?

Muchas gracias.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #5 (permalink)  
Antiguo 10/07/2012, 13:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Autorización con Zend_Acl

Verifica que tu environment este como development, lo puedes hacer desde el virtual host poniendo:

SetEnv environment development

Saludos.
  #6 (permalink)  
Antiguo 10/07/2012, 14:05
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Autorización con Zend_Acl

Gracias Gator, era eso.

Tengo otra duda... igual una chorradilla jeje pero la preguntaré en otro post y creo que ya después de esta 0 dudas con Zend Framework XD.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Etiquetas: autorización, framework
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 03:15.