setActionsNounAndPastVerb([ 'edit' => ['Modification','modifié', 'de la '], 'debugOn' => ['Passage en mode debug','activé le mode debug de'], 'nolimit' => ['Passage en mode pleins pouvoirs','activé le mode pleins pouvoirs'], ]); /* * b) Actions de ce controleur qui enverront des notifications (log et/ou email) * * 'log' = logger seulement * 'mail' => envoyer un mail seulement * 'both' = faire les 2 (logger ET envoyer un mail) * */ $this->setNotificationAllowedOnActions([ /* 'edit' => 'log', 'debugOn' => 'log', 'nolimit' => 'log', */ 'edit' => 'both', 'debugOn' => 'both', //'nolimit' => 'both', ]); /* * c) Règles d'accès (ACLs) * */ // Toutes les actions sont INTERDITES sauf 'view' et 'edit' (seulement pour superadmin) // Actions interdites (ou N/A) // NB: cette ligne est inutile vue que ces actions ne sont pas implémentées dans ce controleur // => leur accès serait de toute façon refusé // => mais bon, c'est au cas où on aurait un jour l'idée d'ajouter ces actions (bien qu'elles n'aient pas de sens) //foreach (['add', 'index', 'find', 'delete'] as $action) $this->setAuthorizationsForAction($action, -1); // Donc, on préfère plutôt supprimer ces actions par défaut : foreach (['add', 'index', 'find', 'delete'] as $action) unset($this->is_authorized_action[$action]); // Actions autorisées seulement à superadmin foreach (['view', 'edit', 'nolimit', 'debugOn', 'debugOff'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]); // Actions autorisées à tous foreach (['installOn', 'installOff'] as $action) $this->setAuthorizationsForAction($action, 0); } // setAuthorizations() /** * * @param * $user * @return boolean Give authorization for configuration */ //public function isAuthorized($user) /* public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { $this->myDebug("step AVANT 1: ConfigurationsController.isAuthorized(user)"); $this->myDebug("user is:"); $this->myDebug($user); // $configuration = $this->confLabinvent; // $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; $action = $this->request->getAttribute('params')['action']; $role = $this->getUserRole($user); // TOUS // if ($action == 'view') return true; // Super-Admin peut accéder à chaque action // if ($role == 'Super Administrateur') return true; // return false; return parent::isAuthorized($user); } */ /** * * * !!! ATTENTION !!! * * Nommer la variable configuration transmise à la vue : configurationObj */ /** * View method * * @param string|null $id * Configuration id. * @return \Cake\Network\Response|null * @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found. */ public function view($id = null) { // On impose la valeur 1 $id = 1; $configurationObj = $this->Configurations->get($id, [ 'contain' => [] ]); $this->set('configurationObj', $configurationObj); $this->set('_serialize', [ 'configurationObj' ]); } /** * Edit method * * @param string|null $id * Configuration id. * @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise. * @throws \Cake\Network\Exception\NotFoundException When record not found. */ public function edit($id = null) { // On impose la valeur 1 $id = 1; $configurationObj = $this->Configurations->get($id, [ 'contain' => [] ]); if ($this->request->is([ 'patch', 'post', 'put' ])) { $configurationObj = $this->Configurations->patchEntity($configurationObj, $this->request->getData()); // le $this->request->getData() et peut-être déprécié, mais osef on veut TOUT le tableau data // Ldap user login field name doit être en minuscules : if ($configurationObj->ldap_authenticationType) { $configurationObj->ldap_authenticationType = strtolower($configurationObj->ldap_authenticationType); //debug("conf"); debug($configurationObj->ldap_authenticationType); exit; } //debug($configurationObj); // On a activé ou désactivé LDAP ? Il faudra alors faire un logout pour éviter des pb de cache... $MUST_LOGOUT = $configurationObj->isDirty('ldap_used'); if (! $this->Configurations->save($configurationObj)) // SAVE KO $this->Flash->error(__("La configuration n'a pas pu être sauvegardée")); else { //debug("must logout ?"); debug($MUST_LOGOUT); exit; // SAVED OK $this->Flash->success(__('La configuration a bien été sauvegardée')); // On reload la configuration $this->confLabinvent = TableRegistry::getTableLocator()->get('Configurations')->find()->first(); /* $this->confLabinvent = TableRegistry::get('Configurations')->find() ->where([ 'id =' => 1 ]) ->first(); */ if ($MUST_LOGOUT) { $this->Flash->success(__('Vous avez été déconnecté pour vous obliger à vous reconnecter avec un nouveau login (car ldap activé ou désactivé)')); return $this->redirect([ 'controller' => 'users', 'action' => 'logout' ]); } if ($configurationObj->get('mode_install')) { return $this->redirect([ 'controller' => 'pages', 'action' => 'home' ]); } else { return $this->redirect([ 'action' => 'view', $id ]); } } } // Gestion de la section LDAP : on ne la montre que si active $disp_ldap = $configurationObj->get('ldap_used') ? 'display:block' : 'display:none'; /* $disp = 'display:block'; $ldap = $configurationObj->get('ldap_used'); if ($ldap !== null) { if ($ldap) { $disp = 'display:block'; } else { $disp = 'display:none'; } } */ $this->set(compact('configurationObj', 'disp_ldap')); /* (EP202102) fait par défaut $this->set('_serialize', [ 'configurationObj' ]); */ } /** * Activate debug mode * * @return \Cake\Network\Response|NULL */ public function setModeDebug($on=true) { $config = $this->Configurations->get('1')->set('mode_debug', $on?1:0); $verb = $on ? "démarré" : "stoppé"; if ($this->Configurations->save($config)) { $this->Flash->success(__("Le mode debug a bien été $verb")); } //debug("redirect !"); return $this->redirect([ 'controller' => 'pages', 'action' => 'tools' ]); } public function debugOn() {$this->setModeDebug(true);} /* { $config = $this->Configurations->get('1')->set('mode_debug', 1); if ($this->Configurations->save($config)) { $this->Flash->success(__('Le mode debug a bien été démarré.')); } return $this->redirect([ 'controller' => 'pages', 'action' => 'tools' ]); } */ /** * Desactivate debug mode * * @return \Cake\Network\Response|NULL */ public function debugOff() {$this->setModeDebug(false);} /* { $config = $this->Configurations->get('1')->set('mode_debug', 0); if ($this->Configurations->save($config)) { $this->Flash->success(__('Le mode debug a bien été arrété.')); } return $this->redirect([ 'controller' => 'pages', 'action' => 'tools' ]); } */ /** * Activate install mode * * @return \Cake\Network\Response|NULL */ public function setModeInstall($on=true) { $config = $this->Configurations->get('1')->set('mode_install', $on?1:0); $verb = $on ? "démarré" : "stoppé"; if ($this->Configurations->save($config)) { $this->Flash->success(__("Le mode install a bien été $verb")); } return $this->redirect([ 'controller' => 'pages', 'action' => $on?'home':'tools' ]); } public function installOn() {$this->setModeInstall(true);} /* { $config = $this->Configurations->get('1')->set('mode_install', 1); if ($this->Configurations->save($config)) { $this->Flash->success(__('Le mode install a bien été démarré.')); } return $this->redirect([ 'controller' => 'pages', 'action' => 'home' ]); } */ /** * Desactivate install mode * * @return \Cake\Network\Response|NULL */ public function installOff() {$this->setModeInstall(false);} /* { $config = $this->Configurations->get('1')->set('mode_install', 0); if ($this->Configurations->save($config)) { $this->Flash->success(__('Le mode install a bien été arrété.')); } return $this->redirect([ 'controller' => 'pages', 'action' => 'tools' ]); } */ /** * Activation/Désactivation du mode no limit (SA a tous les droits) * Action à "bascule" ON/OFF (Si ON => OFF, si OFF => ON) * */ public function nolimit() { //$this->SUPERADMIN_CAN_DO_EVERYTHING = ! $this->SUPERADMIN_CAN_DO_EVERYTHING; $config = $this->Configurations->get(1); $config->mode_nolimit = ! $config->mode_nolimit; $verb = $config->mode_nolimit ? "activé":"désactivé"; if ($this->Configurations->save($config)) { $this->Flash->success(__("Le mode 'SuperAdmin a tous les droits' est $verb")); } return $this->redirect([ 'controller' => 'pages', 'action' => 'tools' ]); } }