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

Implementar Acl

Estas en el tema de Implementar Acl en el foro de Zend en Foros del Web. Hola a todos, aqui nuevamente con un inconveniente al momento de implementar ACL, hasta donde he leido y visto en ejemplos en la web... lo ...
  #1 (permalink)  
Antiguo 02/03/2012, 18:49
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Implementar Acl

Hola a todos, aqui nuevamente con un inconveniente al momento de implementar ACL, hasta donde he leido y visto en ejemplos en la web... lo que hacen es definir cada permiso (allow), y denegacion (denied), de manera individual, hasta donde veo es beneficioso, del punto que me permite definir que actions puede ejecutar un usuario, pero en un sistema donde tengo distintos niveles de usuarios (roles), y distintos permisos, hacerlo al menos de la manera como demuestran en los ejemplos veo que es algo titanico :S aqui un ejemplo de como lo hacen :S
Código PHP:
   //Add a new role called "guest"
    
$this->addRole(new Zend_Acl_Role('guest'));
 
    
//Add a role called user, which inherits from guest
    
$this->addRole(new Zend_Acl_Role('user'), 'guest');
 
    
//Add a resource called page
    
$this->add(new Zend_Acl_Resource('page'));
 
    
//Add a resource called news, which inherits page
    
$this->add(new Zend_Acl_Resource('news'), 'page');
 
    
//Finally, we want to allow guests to view pages
    
$this->allow('guest''page''view');
 
    
//and users can comment news
    
$this->allow('user''news''comment'); 
En una aplicacion, sistema o lo que fuese, si lelgo a tener 5 roles ( mi actual caso), y N usuarios, este ejemplo no ayudaria mucho.... busque alternativas pero no logre encontrar mucha informacion de como implementar algo mas elaborado... me surgio la idea de colocar todos estos permisos en una tabla y que este disponible en cada request para verificar dicho permiso, que les parece esta idea? alguien que haya optado por la misma idea...o alguna otra solucion que le hayan dado....

Otro dificultad que encontre es como defino que modulo usara los ACL, actualmente tengo dos modulos tipicos (Public y Admin) y en mi caso el admin solo es el que necesita el ACL, como haria para indicaria que solo se use en el modulo Admin... otro detalle es como es como accedo a los datos del usuario, por que hasta el momento accedo asi:
Código PHP:
Zend_Auth::getInstance()... 
Alguna referencia... Gracias de antemano...
__________________
Un Caballero Jura Lealtad. Usa su espada para suprimir la Injusticia No Conoce el Odio y Tampoco el AMOR...
  #2 (permalink)  
Antiguo 02/03/2012, 20:10
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: Implementar Acl

En el ejemplo que expones no veo el problema, el tema es cuando es dinámico y granular, igual hay varios ejemplos, te dejo algunos,

http://framework.zend.com/wiki/displ...tabase+backend
http://www.zimuel.it/en/a-use-case-o...h-db-and-ldap/
http://codeutopia.net/blog/2009/02/1...-dynamic-acls/
http://www.slideshare.net/wimg/creat...ebinar-8337996 --> http://www.zend.com/en/webinar/Frame...f-20110615.flv

Con respecto a definir el acl por modulo, ten en cuenta que los modulos de Zend son un chiste, no es mas que una forma de separar bloques de código pero no te permite definir en algun lugar un acl para que el modulo lo utilice, porque el modulo como tal no existe, son second-class citizens, de todas formas seguramente tengas un plugin, bueno ese plugin tiene acceso al request, a traves de este sabes a que modulo intenta acceder el request y en base a esto obtienes el acl.
Sobre el usuario, no entiendo donde tienes el problema teniendo en cuenta que puedes guardar la info que quieras sobre el mismo en sesion, incluso puedes hacer un plugin que en cada request "levante" el usuario y lo sete al frontController o al request.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 03/03/2012 a las 05:40 Razón: rephrase
  #3 (permalink)  
Antiguo 14/03/2012, 16:15
 
Fecha de Ingreso: septiembre-2008
Mensajes: 20
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Implementar Acl

Bueno la forma más simple de ver este asunto de acl es: modules, controller y action hay que tratarlos como resources, por lo que si quieres montarlos en la BD todos tus resources en una tabla, los roles son como vas a nombrar los grupos y almacenarlos en otra tabla, los permisos seria otra tabla donde tendríamos relacionados los roles con los resource y una columna donde vamos a permitir o denegar, en la tabla de usuarios vas a asignarle el rol, por lo que de el predispatch() con un plugin puedes verificar si cada usuario tiene permiso al recurso.
Bueno es una forma muy general de verlo, espero y te sirva, saludos

Etiquetas: acl, acl-modulo, seguridad
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:25.