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

Duda sobre Zend_Acl

Estas en el tema de Duda sobre Zend_Acl en el foro de Zend en Foros del Web. Tengo esta duda. En el controller visitas , tengo una accion Index, y en el controller listados tambien tengo un index. al hacer : $this->add(new ...
  #1 (permalink)  
Antiguo 27/05/2010, 06:20
 
Fecha de Ingreso: agosto-2009
Mensajes: 138
Antigüedad: 15 años, 3 meses
Puntos: 0
Duda sobre Zend_Acl

Tengo esta duda.

En el controller visitas , tengo una accion Index, y en el controller listados tambien tengo un index.

al hacer :

$this->add(new Zend_Acl_Resource('visitas'));
$this->add(new Zend_Acl_Resource('index'), 'visitas');
y esto
$this->add(new Zend_Acl_Resource('listados '));
$this->add(new Zend_Acl_Resource('index'), 'listados ');

da el error de que el resource index ya existe. Hay alguna manera para diferenciar los distintos index de los controladores.


Código PHP:
class Application_Model_Acl extends Zend_Acl
{
   
// private $_acl;

    
public function  __construct(Zend_Auth $auth) {


         

        
//$roleGuest = new Zend_Acl_Role('invitado');

        
$this->add(new Zend_Acl_Resource('auth'));
        
$this->add(new Zend_Acl_Resource('login'), 'auth');
        
$this->add(new Zend_Acl_Resource('logout'), 'auth');

        
$this->add(new Zend_Acl_Resource('error'));

        
$this->add(new Zend_Acl_Resource('visitas'));
        
$this->add(new Zend_Acl_Resource('index'), 'visitas');
        
$this->add(new Zend_Acl_Resource('add'), 'visitas');
        
$this->add(new Zend_Acl_Resource('delete'), 'visitas');
        
$this->add(new Zend_Acl_Resource('update'), 'visitas');
      
        
$this->add(new Zend_Acl_Resource('listados'));
        
$this->add(new Zend_Acl_Resource('listado'),'listados');

  

        
$this->addRole(new Zend_Acl_Role('guest'));
        
$this->addRole(new Zend_Acl_Role('invitado'));
        
$this->addRole(new Zend_Acl_Role('usuario','invitado'));
        
$this->addRole(new Zend_Acl_Role('admin'),'usuario');

        
$this->allow(null,'login');
        
$this->deny('invitado','login');
        
$this->deny('usuario','login');

        
$this->allow('invitado',array('auth','logout','listados'));
        
$this->allow('usuario',array('auth','listados','visitas'));
        
$this->allow('usuario','visitas');

        
        
        
        
//$this->allow('usuario',array('listados','add','update'));
        
$this->allow('admin','visitas');




       
    }


Tambien he creado un menu con
Código:
<config>
    <nav>
        <logout>
            <label>Logout</label>
            <controller>auth</controller>
            <action>logout</action>
            <resource>logout</resource>
        </logout>

        <login>
            <label>Login</label>
            <controller>auth</controller>
            <action>login</action>
            <resource>login</resource>
        </login>

       <visitas>
                <label>Visitas</label>
                <uri>#</uri>
                <resource>visitas</resource>
                <pages>
                    <list>
                         <label>Visitantes</label>
                        <controller>visitas</controller>
                        <action>index</action>
                    </list>
                    <add>
                         <label>Add</label>
                        <controller>visitas</controller>
                        <action>add</action>
                    </add>
                     <update>
                         <label>Update</label>
                        <controller>visitas</controller>
                        <action>update</action>
                    </update>
                     <delete>
                         <label>Delete</label>
                        <controller>visitas</controller>
                        <action>delete</action>
                    </delete>
                </pages>
        </visitas>
           <listados>
                <label>Listados</label>
                <uri>#</uri>
                <resource>listados</resource>
                <pages>
                    <list>
                         <label>Listado</label>
                        <controller>Listados</controller>
                        <action>listado</action>
                    </list>

                </pages>
        </listados>

    </nav>

</config>
y en el boostrap lo he llamado asi :
Código PHP:

  $navContainerConfig 
= new Zend_Config_Xml(APPLICATION_PATH '/configs/navigation.xml','nav');
        
$navContainer = new Zend_Navigation($navContainerConfig);

      
/* if($this->_auth->getStorage()->read()==null)
              $this->_auth->setStorage()->read()->role = 'invitado';

       print_r($this->_auth->getStorage());*/

         
$view->navigation($navContainer)->setAcl($this->_acl)->setRole(Zend_Registry::get('role')); 

todo perfecto salvo que no se si se podra hacer, lo que quiero es que por ejemplo usuario pueda visualizar el menu visitas y las acciones , add, update , pero no delete.

al darle permisos de visualizacion me visualiza las tres acciones en el menu. al pertenecer al mismo controlodar.por supuesto que no puede actuar sobre delete , pero existe alguna manera que no visualize la accion delete en el menu del navigation.

Muchas gracias.
  #2 (permalink)  
Antiguo 27/05/2010, 08:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Duda sobre Zend_Acl

Una propuesta es usar la nomenclatura controller:action, por ejemplo:
Código PHP:
Ver original
  1. $this->add(new Zend_Acl_Resource('visitas:index'));
  2. $this->add(new Zend_Acl_Resource('listados:index'));

Saludos.
  #3 (permalink)  
Antiguo 27/05/2010, 09:40
 
Fecha de Ingreso: agosto-2009
Mensajes: 138
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Duda sobre Zend_Acl

Perfecto , muchas gracias es lo que estaba buscando
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 08:48.