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

Enviar 2 roles al zend navigation con zend acl

Estas en el tema de Enviar 2 roles al zend navigation con zend acl en el foro de Zend en Foros del Web. Tengo la siguiente inquietud. Este es mi archivo xml de navigation donde esta los permisos y los roles @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código XML: Ver original <?xml ...
  #1 (permalink)  
Antiguo 03/05/2012, 19:57
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 13 años, 6 meses
Puntos: 1
Pregunta Enviar 2 roles al zend navigation con zend acl

Tengo la siguiente inquietud.
Este es mi archivo xml de navigation donde esta los permisos y los roles
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <config>
  3.     <nav>  
  4.         <root>
  5.             <label>Root</label>
  6.             <uri>/</uri>           
  7.             <pages>
  8.                 <saga>
  9.                     <label>Saga</label>
  10.                     <uri>#</uri>
  11.                 </saga>
  12.                 <admin>
  13.                     <label>Administración</label>                  
  14.                     <class>dont-clobber-me</class>                             
  15.                     <uri>#dropdown</uri>
  16.                     <resource>default:index</resource>
  17.                     <privilege>admin</privilege>
  18.                     <pages>
  19.                         <halfway>                              
  20.                             <label>Intermedia</label>
  21.                             <module>default</module>
  22.                             <controller>index</controller>
  23.                             <action>halfway1</action>
  24.                             <resource>default:index</resource>
  25.                             <privilege>halfway</privilege>                         
  26.                         </halfway>                     
  27.                     </pages>                   
  28.                 </admin>
  29.                 <docente>
  30.                     <label>Ingreso Materia</label>                 
  31.                     <class>dont-clobber-me</class>                             
  32.                     <uri>#dropdown</uri>
  33.                     <resource>default:index</resource>
  34.                     <privilege>docente</privilege>
  35.                     <pages>
  36.                         <insert>                               
  37.                             <label>Insert</label>
  38.                             <module>default</module>
  39.                             <controller>index</controller>
  40.                             <action>insert</action>
  41.                             <resource>default:index</resource>
  42.                             <privilege>insert</privilege>                          
  43.                         </insert>                      
  44.                     </pages>
  45.                 </docente>             
  46.                 <logout>
  47.                     <label>Cerrar Sessión</label>
  48.                     <module>default</module>
  49.                     <controller>index</controller>
  50.                     <action>logout</action>
  51.                     <resource>default:index</resource>
  52.                     <privilege>logout</privilege>              
  53.                 </logout>              
  54.             </pages>
  55.         </root>
  56.     </nav>
  57. </config>

Otra con la configuracion de mi ACL
Código PHP:
<?php
class App_Acl{
    
    public 
$acl;
    
    public function 
__construct()
    {
        
$this->acl = new Zend_Acl();    
    }    
    
    public function 
setRoles()
    {        
        
$this->acl->addRole(new Zend_Acl_Role('admin'));
        
$this->acl->addRole(new Zend_Acl_Role('docente'));
        
$this->acl->addRole(new Zend_Acl_Role('familia'));
        
$this->acl->addRole(new Zend_Acl_Role('admon'));
    }    
    
    public function 
setResources()
    {
        
$this->acl->add(new Zend_Acl_Resource('default:index'));        
        
$this->acl->add(new Zend_Acl_Resource('default:error'));
    }
    
    public function 
setPrivilages()
    {                
        
$this->acl->allow('admin',   'default:index', array('halfway','logout','admin'));
        
$this->acl->allow('docente''default:index', array('docente','insert','logout'));
    }
    
    public function 
setAcl()
    {
        
Zend_Registry::set('Zend_Acl'$this->acl);
    }
    
}
y mi archivo Bootstrap
Código PHP:
/**
     * init Zend_ACL 
     */    
    
    
protected function _initACL()
    {
        if(
App_Usuario::isLogged())
        {
            
$acl  = new App_Acl();
            
$acl->setRoles();
            
$acl->setResources();
            
$acl->setPrivilages();
            
$acl->setAcl();
        }        
    }    

protected function 
_initView ()
    {
        
$view = new Zend_View();
        
$view->setEncoding('UTF-8');
        
$view->doctype('HTML5');
        
$view->headMeta()
             ->
appendHttpEquiv('Content-Type''text/html;charset=utf-8');
        
$view->headTitle('')
             ->
setSeparator(' - ');
        
$view->headTitle("SAGA");
        
        if(
App_Usuario::isLogged())
        {
            
            
$view->registerHelper(new App_View_Helper_Menu(), 'menu');
            
            
$navContainerConfig = new Zend_Config_Xml(APPLICATION_PATH'/configs/navigation.xml''nav');
            
$navContainer         = new Zend_Navigation($navContainerConfig);
            
            
$view->navigation($navContainer)
                 ->
menu()
                 ->
setMinDepth(1)
                 ->
setUlClass('nav nav-pills')
                 ->
setAcl(Zend_Registry::get('Zend_Acl'))
                 ->
setRole('admin');
        }
        
        
        
$viewRenderer Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
        
$viewRenderer->setView($view);    
        
        return 
$view;
    } 
Tengo el siguiente inconveniente. todo funciona normalmente si envio solo un rol al
Código PHP:
$view->navigation($navContainer)
                 ->
menu()
                 ->
setMinDepth(1)
                 ->
setUlClass('nav nav-pills')
                 ->
setAcl(Zend_Registry::get('Zend_Acl'))
                 ->
setRole('admin'); 
Pero necesito que le cargue 2 osea:
Código PHP:
$view->navigation($navContainer)
                 ->
menu()
                 ->
setMinDepth(1)
                 ->
setUlClass('nav nav-pills')
                 ->
setAcl(Zend_Registry::get('Zend_Acl'))
                 ->
setRole('admin','docente'); 
Nose si esto se puede hacer o hay otra manera de realizarlo, alguien me podria solucionar esta duda.
  #2 (permalink)  
Antiguo 03/05/2012, 20:16
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: Enviar 2 roles al zend navigation con zend acl

El view helper no esta preparado para múltiples roles, ese es tu escenario ? un usuario puede tener múltiples roles y estos no heredan entre ellos ?, porque lo que se suele hacer es que los roles hereden unos de otros y el rol admin tiene privilegios para todo.

http://framework.zend.com/manual/en/....role_registry

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 03/05/2012, 20:23
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Enviar 2 roles al zend navigation con zend acl

Si el escenario es que el usuario puede tener múltiples roles.
la cosa es que lo roles puede ser dinamico, como lo tengo en el ejemplo, son quedamos.
¿entonce me tocaría hacer dinamica con la clase App_Acl con los roles?
¿herredando padre y hijos de un rol?
  #4 (permalink)  
Antiguo 04/05/2012, 11:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Enviar 2 roles al zend navigation con zend acl

Exacto, lo que tienes que hacer es precisamente eso, que los roles los herede el usuario que estas haciendo, algo así:
Código PHP:
Ver original
  1. $userRole = new Zend_Acl_Role('thisUser');
  2. $roles = $currentUser->getRoles(); // Desde la DB por ejemplo
  3. $acl->addRole($userRole, $roles);

Así tu usuario puede heredar de 1 o n roles.

Saludos.
  #5 (permalink)  
Antiguo 05/05/2012, 14:52
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Enviar 2 roles al zend navigation con zend acl

Gracias por la ayuda

Etiquetas: rol, roles, zend_acl, zend_navigation
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 11:57.