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

zend ACL navigator modificar para no ver otros niveles

Estas en el tema de zend ACL navigator modificar para no ver otros niveles en el foro de Zend en Foros del Web. Hola que tal?? espero poder explicarme, tengo un acl donde les doy permisos a usuarios digas de las chivas y del america, (equipos populares en ...
  #1 (permalink)  
Antiguo 08/10/2010, 17:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
zend ACL navigator modificar para no ver otros niveles

Hola que tal??

espero poder explicarme, tengo un acl donde les doy permisos a usuarios digas de las chivas y del america, (equipos populares en mexico), he construido un menu en gral en xml que muestro con zend_navigation
Código PHP:
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
    <nav>
        <america>
            <label> AMERICA </label>
            <uri> </uri>
            <pages>
                <practicas>
                    <label>practicas</label>
                    <uri></uri>
                    <pages>
                        <anomalias>
                            <label>nueva practica</label>
                                <resource>practica</resource>
                                <controller>site</controller>
                                <action>practica</action>
                        </anomalias>
                    </pages>
                </practicas>
                <comunicados>
                    <label>comunicados</label>
                    <uri></uri>
                    <pages>
                        <comunicados_prensa>
                            <label>Ventas RCs</label>
                            <resource>comunicados_prensa</resource>
                            <controller>site</controller>
                            <action>comunicados_prensa</action>
                        </comunicados_prensa>
                        <comunicados_internos>
                            <label>comunicados_internos</label>
                            <resource>comunicados_prensa</resource>
                            <controller>site</controller>
                            <action>comunicados_internos</action>
                        </comunicados_internos>
                    </pages>
                </comunicados>
            </pages>
        </america>
        <chivas>
            <label>CHIVAS</label>
            <uri></uri>
#estas etiquetas son las que me intrigan pero sin ellas me marca error:
#'Invalid argument: Unable to determine class to instantiate'        
            <pages>
                <pagos>
                    <label>pagos</label>
                    <uri></uri>
                    <pages>
                        <verificar_pagos>
                            <label>Verificar Pagos</label>
                                        <resource>verificar_pagos</resource>
                                        <controller>site</controller>
                                        <action>verificar_pagos</action>
                        </verificar_pagos>
                        <justificargastos>
                            <label>justificar gastos</label>
                                        <resource>justificargastos</resource>
                                        <controller>site</controller>
                                        <action>justificargastos</action>
                        </justificargastos>
                    </pages>
                </pagos>
            </pages>
        </chivas>
</nav>
</configdata>
en este momento si entra alguien del america puede ver el menu de las chivas, aunque no pueden accesar a nada, pero he pensado asi el menu, porque puede llegar un directivo que es dueño de una parte del america como de las chivas.

quiero evitar que se muestren los menus que no son del rol asignado.

espero haberme explicado
y espero me puedan ayudar
gracias :D:D:
  #2 (permalink)  
Antiguo 08/10/2010, 23:22
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: zend ACL navigator modificar para no ver otros niveles

Zend_Navigation por defecto ya soporta el uso de ACL, lo único que tienes que hacer es llamar a los helpers:
Código PHP:
Ver original
  1. Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($Acl);
  2. Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($Role);

Con eso se va a checar y solo se va a dibujar los elementos a los que tengan acceso.

Saludos.
  #3 (permalink)  
Antiguo 09/10/2010, 22:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: zend ACL navigator modificar para no ver otros niveles

de hecho si tengo el acl con el navigator, y efectivamente no me muestra los controladores a los que el usurio no tiene acceso, pero si me muestra los titulos que no estan asignados a acciones, con el ejemplo, si me muestra
<label>comunicados</label>
<uri></uri>
aunque el rol no tenga ningun acceso sobre acciones que cuelgan de este titulo.
  #4 (permalink)  
Antiguo 11/10/2010, 08:53
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: zend ACL navigator modificar para no ver otros niveles

Muy raro, no debería de hacerlo, ¿como estas imprimiendo tu menu?

Saludos.
  #5 (permalink)  
Antiguo 11/10/2010, 09:04
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: zend ACL navigator modificar para no ver otros niveles

tengo un view helper
Código PHP:
class Zend_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract 
{
    public function 
loggedInAs ()
    {
        
$this->_acl = new Library_MyApp_Acl();
        
$roleZend_Auth::getInstance()->getIdentity()->role;      
        
$navContainerConfig = new Zend_Config_Xml('Application/Configs/navigation.xml''nav');
        
$navContainer       = new Zend_Navigation($navContainerConfig);
        
$this->view->navigation($navContainer);
        return 
$this->view->navigation()
                                        ->
setAcl($this->_acl)
                                        ->
setRole($role)
                                        
                                        ;
    }

y en mi layout
Código PHP:
            <div id="sidebar">
                     <?php 
                     
if( Zend_Auth::getInstance()->hasIdentity() ) 
                       {
                           echo 
$this->loggedInAs();
                       }
                        
?>  
            </div>

lo que me queda duda, es por ejemplo, necesitaba presentar el menu, de como es que se veria, ya despues fui llenando las acciones y los controladore
lo que hacia era poner las etiquetas <uri></uri> junto con las de <label>
e imprimia todo, porque no estaba asiganada ninguna accion, a mi parecer estaba bien, cuando llene las acciones no pintaba nada, o daba error, fue cuando puse las etiquetas <uri>
en los titulos.

yo pienso que es ahi donde esta dando el problema, pero ... no se

gracias
  #6 (permalink)  
Antiguo 11/10/2010, 09:39
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: zend ACL navigator modificar para no ver otros niveles

Creo el problema es ese, que estas poniendo los <uri> vacios y no les pones ningún resource asignado, también tienes que darle a esas partes un resource para que el ACL las pueda verificar.

Saludos.
  #7 (permalink)  
Antiguo 11/10/2010, 10:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: zend ACL navigator modificar para no ver otros niveles

efectivamente, cree los resource, de hecho estaba creado acciones vacias, pero no era necesario solo con declararlos en la configuraion del acl, y asignarlos en el navigation.


muchas gracias :D:D:
  #8 (permalink)  
Antiguo 03/11/2010, 16:02
 
Fecha de Ingreso: junio-2009
Mensajes: 156
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: zend ACL navigator modificar para no ver otros niveles

Hola amigos, de hecho tengo un problema muy similar a este, pero no se como asociar los menus el zend_acl con el zend_navigation.
Por ejemplo en este caso el archivo xml del navigation tiene dos etiquetas que encierran los menus: Chivas y America... esto tiene que ver con el rol? o sea en este caso los roles son chivas y america ?

Si me pueden sacar esta duda se los agradezco, asi me va a servir de ejemplo para mi aplicacion.
  #9 (permalink)  
Antiguo 03/11/2010, 16:16
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: zend ACL navigator modificar para no ver otros niveles

No tiene mucho que ver el Rol, lo que haces en Zend_Navigation es definir el "privilege" y el "resource" y luego estableces el Acl y ahí es donde se checa el permiso.

Saludos.
  #10 (permalink)  
Antiguo 05/11/2010, 08:28
 
Fecha de Ingreso: junio-2009
Mensajes: 156
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: zend ACL navigator modificar para no ver otros niveles

Gracias GatorV,
Pregunto si el "privilege" también se define en el archivo Xml, ya que en el archivo del amigo harryems, veo que se definen los resources, pero no los privileges.

Gracias.
  #11 (permalink)  
Antiguo 05/11/2010, 08:44
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: zend ACL navigator modificar para no ver otros niveles

Así es, también puedes definir el privilege en el XML.

Saludos.
  #12 (permalink)  
Antiguo 05/11/2010, 16:12
 
Fecha de Ingreso: diciembre-2007
Mensajes: 178
Antigüedad: 17 años
Puntos: 1
Respuesta: zend ACL navigator modificar para no ver otros niveles

Muy buenas, yo también estoy empezando con zend navigation.
Una duda que tengo viendo este post es si se puede asignar un rol a cada link o sea que el link se vea o no según el rol de la persona que esta en la pagina en ese momento.

Saludos.
  #13 (permalink)  
Antiguo 06/11/2010, 09:32
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: zend ACL navigator modificar para no ver otros niveles

esa es prisamente la idea del ACL (acces control list)
Código PHP:
class Zend_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract 
{
    public function 
loggedInAs ()
    {
        
$this->_acl = new Library_MyApp_Acl();
        
$roleZend_Auth::getInstance()->getIdentity()->role;      
        
$navContainerConfig = new Zend_Config_Xml('Application/Configs/navigation.xml''nav');
        
$navContainer       = new Zend_Navigation($navContainerConfig);
        
$this->view->navigation($navContainer);
        return 
$this->view->navigation()
                                        ->
setAcl($this->_acl)
                                        ->
setRole($role)  //aqui le pasas el rol y solo mostrara los permisos a los qe tiene derecho.
                                        
                                        
;
    }

yo uso para la asignacion de permisos un .ini, pero bien puedes usar xml.
un ejemplo seria.
Código PHP:
[roles]
Alumno             null
;maestro hereda de alumnodado que tienen todos los
accesos de alumno mas los propios
Maestro            
"Alumno"
;supervisor al heredar de maestro tiene todas las funciones de alumno
;y de maestro
Supervisor         
"Maestro"
;por lo regular el admin no hereda de nadie
admin              
null

[resources]
;
estos son tus controladores y si tu aplicacion es modular
el modulo va del lado derecho,sino puede dejar "Default"
Auth               "Default"
index              "Default"
Site               "Default"
error              "Default"
Users              "Admin"

;las acciones correspondientes a cada controlador
[subresources]
;
AUTH
login              
"Auth"
logout             "Auth"

;SITE
Materias           
"Site"
AltaAlumnos        "Site"
AltaMaestros       "Site"
ALtaMaterias       "Site"

aqui van los permisos a los que se asigna a cada role

[Alumno]
 
Materias.allow     =null
[Maestro]
 
AltaAlumnos.allow  =null

[Supervisor]
 
ALtaMaterias.allow =null
 AltaMaestros
.allow =null
 
;como supervisor hereda de maestro el supervisor por default podria dar de alta alumnos
 
;pero digamos que eso no es lo que queremosentonces podemos negarle ese recurso en especifico
 AltaAlumnos
.denied null

[admin];de esta forma admin aunque no hereda de nadietiene derecho a todos
;los recursos.
allow              null 
espero te sea de ayuda, es solo un primer acercamiento, ademas de que lo genere al vuelo, asi que no creo que funcione de entrada, pero repito es solo para darte una idea de como funciona.

saludos.

Etiquetas: acl, modificar, ver
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 07:17.