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');
}
}
Código:
y en el boostrap lo he llamado asi :<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>
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.