/** @brief calcul automatique du nom de la resource associé à la route * * Si la resource a été spécifié dans le navigation, le calcul n'est pas effectué * Utilisation de Projet_DataHelper::resource pour calculer le nom de la ressource. * * !! La route doit avoir la méthode getDefaults * * @see Projet_DataHelper::resource * @return le nom de la ressource, ou null, si la page n'a pas de route */ public function getResource() { if ($this->_resource) { // si la ressource a été définie explicitement on la renvoie return $this->_resource; } elseif ($this->_route) { $oRoute = Zend_Controller_Front::getInstance()->getRouter()->getRoute($this->_route); // la route doit avoir la méthode getDefaults $aDefaults = $oRoute->getDefaults(); // on suppose que le tableau defaults comprend le module, controller, action return $this->_resource = Projet_DataHelper::resource($aDefaults['module'], $aDefaults['controller'], $aDefaults['action']); } else { return null; } }
public function preDispatch(Zend_Controller_Request_Abstract $request) { /* // qu'on puisse tester directement le profil // Le profil est sauvegardé alors en session if ($request->getParam(IDENTITE_ID_PROFIL) && APP_ENV != 'production') { $nRole = $request->getParam(IDENTITE_ID_PROFIL); Projet_Acl_Acl::setDefaultRole($nRole); Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole($nRole); $oIdent[IDENTITE_ID_PROFIL] = $nRole; $this->_auth->getStorage()->write($oIdent); } else */ # if (is_array($oIdent) && array_key_exists(IDENTITE_ID_PROFIL, $oIdent)) { # $nRole = $oIdent[IDENTITE_ID_PROFIL]; # } else { # $nRole = 2; # } // On intercepte le nom de la ressource (controller) et du privilège demandé (action). $sModule = $request->getModuleName(); $sController = $request->getControllerName(); $sAction = $request->getActionName(); // La ressource n'existe pas. // commenté car la ressource est créé automatiquement si on ne l'a pas déclaré dans acl.ini # if (!$this->_acl->has($sResource)) { # $this->_controller->gotoSimple(self::FAIL_ACL_ACTION, self::FAIL_ACL_CONTROLLER, self::FAIL_ACL_MODULE, array("messageWarn" => 1)); # } // TODO: vérifier qu'on est pas sur la route d'authentification // Le profil utilisé n'existe pas ou n'est pas reconnu par l'application. # if (!$this->_acl->hasRole($nRole) ) { # $this->_controller->gotoRouteAndExit(array("messageWarn" => 2), self::FAIL_AUTH_ROUTE); # } # if (!$sModule || !$sController || !$sAction) { # return; # $this->_controller->gotoRouteAndExit(array("messageWarn" => 4), self::FAIL_ROUTE); # } // La ressource demandée n'est pas accessible pour ce role avec ces privilèges. if (!Projet_Acl_Acl::defaultIsAllowed(Projet_DataHelper::resource($sModule, $sController, $sAction))) { // si requête ajax if ($request->isXmlHttpRequest()) { die(Projet_DataHelper::translate(self::CLE_FAIL_ACL)); } Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->setNamespace('warning')->addMessage(self::CLE_FAIL_ACL); $this->_controller->gotoRouteAndExit(array(), self::FAIL_ACL_ROUTE); } }