userHasRoleAtLeast('Utilisateur')) { * return false; * } * } * return true; * } */ /* * Toute première méthode appelée, * * AVANT authentification * */ public function initialize() { $this->myDebug("step 0A (specific): PagesController.initialize()"); parent::initialize(); // On autorise l'action add SANS authentification (unauthenticated) //$this->Auth->allow(['add']); //$this->LdapAuth->allow(['display']); } // (20200424 EP) public function beforeFilter(\Cake\Event\Event $event) { $this->myDebug("step 1A (specific): PagesController.beforeFilter()"); /* $path = func_get_args(); pr($path); $page = null; if (! empty($path[0])) $page = $path[0]; */ $page = $this->request->getParam('pass.0'); // On autorise l'action display SANS connexion // mais seulement pour la page 'about' //if (in_array($path[0], ['about', 'tools'])) echo "yes"; else echo "no"; if ( $page == 'about' ) $this->LdapAuth->allow(['display']); //if ( in_array($page, ['about', 'tools']) ) $this->LdapAuth->allow(['display']); // Pour le reste, on donne les droits par défaut de AppController parent::beforeFilter($event); } public function isAuthorized($user) { $this->myDebug("step 2A (specific): PagesController.isAuthorized(user)"); $this->myDebug("- user is:", $user); $action = $this->getActionPassed(); if ($action == 'display') { $page = $this->request->getParam('pass.0'); // Action display SANS nom de page => on redirige sur '/' // (c'est à dire sur /pages/home, c'est à dire /pages/display/home) // cf config/routes.php qui définit l'action "display" par défaut pour tout ce qui commence par pages/ if (! $page) { $this->redirect('/'); return false; } switch ($page) { // Page d'accueil autorisée à tous les profils (roles) case 'home': return true; // Page 'tools' seulement à partir de ADMIN // if (! $this->userHasRoleAtLeast('Administration')) { case 'tools': return $this->USER_IS_ADMIN_AT_LEAST(); //case 'tools': return $this->USER_IS_USER(); // Page 'infos' seulement pour SUPERADMIN //if (! $this->USER_IS_SUPERADMIN()) return $this->redirect('/'); case 'infos': return $this->USER_IS_SUPERADMIN(); } } // display // sinon, règle par défaut donnée par AppController return parent::isAuthorized($user); } /** * Displays a view * * @return void|\Cake\Network\Response * @throws \Cake\Network\Exception\NotFoundException When the view file could not * be found or \Cake\View\Exception\MissingTemplateException in debug mode. */ public function display() { // (EP 21/5/19) // On ne voit ce message que sur la page "about" // En effet, les autres pages nécessitant un login, // on est redirigé sur la page login et donc la methode login() du controleur UsersController // Du coup, il faut décommenter la ligne "exit" juste après pour voir ce message (évite la redirection). $this->myDebug("step 2: PagesController.display()"); $configuration = $this->confLabinvent; // Action display SANS nom de page => on redirige sur '/' // (c'est à dire sur /pages/home, c'est à dire /pages/display/home) // cf config/routes.php qui définit l'action "display" par défaut pour tout ce qui commence par pages/ $page = $this->request->getParam('pass.0'); /* if (! $page) $this->redirect('/'); */ $subpage = $this->request->getParam('pass.1'); //if (!$subpage) $subpage = null; /* $path = func_get_args(); if (! count($path)) return $this->redirect('/'); if ($path[0] === null) $path[0] = ''; $this->myDebug("- path is:"); $this->myDebug($path); $page = $subpage = null; if (! empty($path[0])) $page = $path[0]; if (! empty($path[1])) $subpage = $path[1]; */ $this->myDebug("- page is:"); $this->myDebug($page); $this->myDebug("- subpage is:"); $this->myDebug($subpage); /* // @todo : faire plus proprement, dans isAuthorized() // Si l'utilisateur n'est pas connecté, on le redirige vers la page login.ctp // sauf si l'action demandée est 'about' ou si le mode install est activé //if (in_array($path[0], ['about', 'tools'])) echo "yes"; else echo "no"; if ( $page != 'about' ) { // ! in_array($page, ['about', 'tools']) if ( // pas logged (pas authentifié) ! $this->LdapAuth->user($configuration->ldap_authenticationType)[0] //&& $path[0]!='about' //&& ! in_array($path[0], ['about', 'tools']) // et pas mode install && ! $configuration->mode_install ) { return $this->redirect([ 'controller' => 'users', 'action' => 'login' ]); } } */ /* // @todo : faire plus proprement, avec isAuthorized() // Page 'tools' seulement à partir de ADMIN if ($page == 'tools') { // if (! $this->userHasRoleAtLeast('Administration')) { if (! $this->USER_IS_ADMIN_AT_LEAST()) return false; //return $this->redirect('/'); } // Page 'infos' seulement pour SUPERADMIN if ($page == 'infos') { //if (! $this->USER_IS_SUPERADMIN()) return $this->redirect('/'); if (! $this->USER_IS_SUPERADMIN()) return false; } */ // Finalement, on affiche la $page demandée (avec render()) $this->set(compact('page', 'subpage')); //debug(implode('/', $path)); //debug(implode('/', array($page,$subpage))); try { //$this->render(implode('/', $path)); //$this->render("$page/$subpage"); $this->render($subpage ? "$page/$subpage" : $page); //$this->render(implode('/', array($page,$subpage))); } catch (MissingTemplateException $e) { if (Configure::read('debug')) throw $e; throw new NotFoundException(); } } // display() }