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.