Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai ce problème avec zend_navigation, les pages dans mon navigation.xml qui ont le tag <resource> ne s'affiche pas, aux differente types d'utilisateurs, (gust, member ou admin) ..
moi je voulais simplement ne pas afficher la partie administration du navigation aux utilisateurs normaux et aux visiteurs. mais je ne comprends pas pourquoi toutes les pages avec le tag resource ne s'affichent pas.
voilà une partie de mon fichier navigation.xml :
[lang=xml] <nav> <home> <label>Acceuil</label> <controller>index</controller> <action>index</action> </home> <contact> <label>Contact</label> <controller>index</controller> <action>contact</action> <resource>index</resource> </contact> <Categories> <label>Categories</label> <controller>index</controller> <action>categories</action> </Categories> <administration> <label>Administration</label> <controller>admin</controller> <action>index</action> <resource>admin</resource> <pages> <societes> <label>Societes</label> <controller>admin</controller> <action>societes</action> <resource>admin</resource> </societes> </pages> </administration> </nav>
ma methode _initAcl() dans le bootstrap :
[lang=php]$acl = new Zend_Acl(); // add the roles $acl->addRole(new Zend_Acl_Role('guest')); $acl->addRole(new Zend_Acl_Role('user'), 'guest'); $acl->addRole(new Zend_Acl_Role('admin'), 'user'); // add the resources I have only two controller + Error $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('admin')); $acl->add(new Zend_Acl_Resource('error')); // set up the access rules $acl->allow(null, array('error')); // a guest can only read content and login $acl->allow('guest', 'index', array('contact','index', 'login','categories')); // users can also work with content $acl->allow('user', 'index', array('signaler', 'logout')); $acl->deny('user','index',array('inscription','login')); // administrators can do anything $acl->allow('admin', 'admin', array('index', 'categories','ajout-categorie','modifier-categorie','supprimer-categorie')); $acl->deny('admin','index',array('contact')); Zend_Registry::set('acl', $acl);
et la methode _initNavigation() :
[lang=php]protected function _initNavigation(){ $this->bootstrap('layout'); $layout = $this->getResource('layout'); $view = $layout->getView(); $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); $container = new Zend_Navigation($config); $acl = Zend_Registry::get('acl'); $auth = Zend_Auth::getInstance(); if($auth->hasIdentity()) { $identity = $auth->getIdentity(); $role = strtolower($identity->role); }else{ $role = 'guest'; } echo $role; $view->navigation($container)->setAcl($acl)->setRole($role); }
et finnalement la classe Application_Plugin_Acl :
[lang=php]class Application_Plugin_Acl extends Zend_Controller_Plugin_Abstract { public $acl; public function preDispatch(Zend_Controller_Request_Abstract $request){ $this->acl = Zend_Registry::get('acl'); // fetch the current user $auth = Zend_Auth::getInstance(); if($auth->hasIdentity()) { $identity = $auth->getIdentity(); $role = strtolower($identity->role); }else{ $role = 'guest'; } $controller = $request->controller; $action = $request->action; if (!$this->acl->isAllowed($role, $controller, $action)) { if ($role === 'guest') { $request->setControllerName('index'); $request->setActionName('login'); } else { $request->setControllerName('error'); $request->setActionName('noauth'); } } } }
et j'ai cette ligne dans mon application.ini :
resources.frontController.plugins.acl = Application_Plugin_Acl
en espérant que j'ai été claire, j'attends avec impatience vos suggestions et merci en avance .
Hors ligne
Pages: 1