From 1a23f06bcf65e40ee150111c942eccaf98fd6126 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Fri, 5 Jun 2020 12:53:10 +0200 Subject: [PATCH] AUTORISATIONS DESORMAIS ADAPTABLES POUR CHAQUE LABO (v3.7.9.32) --- README.md | 19 ++++++++++++------- src/Controller/AppController.php | 16 +++++++++++++++- src/Controller/MaterielsController.php | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/Controller/SuivisController.php | 29 +++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 2a4251d..c617bee 100644 --- a/README.md +++ b/README.md @@ -53,15 +53,13 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 04/06/2020 -Version: 3.7.9.31 +Date: 05/06/2020 +Version: 3.7.9.32 Author: EP Commentaire: - - MISE À JOUR DE TOUS LES CONTROLEURS pour le nouveau système d'autorisation - - SIMPLIFICATION DES AUTORISATIONS POUR LA PLUPART DES CONTROLEURS SIMPLES - - AUTORISATIONS PAR DÉFAUT POUR TOUT NOUVEAU CONTROLEUR BASIQUE - - AMELIORATIONS DE LA PAGE AFFICHANT LES AUTORISATIONS DYNAMIQUEMENT (/pages/acls ou /pages/acls/#nom_du_controleur) - => On peut ainsi vérifier ce qui est appliqué à l'instant T (juste après la modif d'une règle par exemple) + - AUTORISATIONS DESORMAIS ADAPTABLES POUR CHAQUE LABO + => chaque labo peut désormais adapter les autorisations des utilisateurs à sa sauce !!! + => on part des règles générales par défaut, puis on adapte si besoin, cool non ? - ajout de 2 très gros tests génériques pour les actions et les vues matos/index et matos/view en cours... (ce qui m'évitera plein de tests à la main) @@ -112,6 +110,13 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi ----------------------------------------------------------------------------------------------------------- +04/06/2020 v3.7.9.31 (EP) + - MISE À JOUR DE TOUS LES CONTROLEURS pour le nouveau système d'autorisation + - SIMPLIFICATION DES AUTORISATIONS POUR LA PLUPART DES CONTROLEURS SIMPLES + - AUTORISATIONS PAR DÉFAUT POUR TOUT NOUVEAU CONTROLEUR BASIQUE + - AMELIORATIONS DE LA PAGE AFFICHANT LES AUTORISATIONS DYNAMIQUEMENT (/pages/acls ou /pages/acls/#nom_du_controleur) + => On peut ainsi vérifier ce qui est appliqué à l'instant T (juste après la modif d'une règle par exemple) + 03/06/2020 v3.7.9.30 (EP) - NOUVELLE PAGE AFFICHANT LES AUTORISATIONS DYNAMIQUEMENT (/pages/acls ou /pages/acls/#nom_du_controleur) => On peut ainsi vérifier ce qui est appliqué à l'instant T (juste après la modif d'une règle par exemple) diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 1fb99ed..d8e4ee9 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -1447,7 +1447,21 @@ class AppController extends Controller if (is_null($this->confLabinvent)) throw new \Exception("EXCEPTION: La table 'configurations' de la base de données est vide"); // Initialisation des autorisations pour les actions du controleur - $this->setAuthorizations(); + $SPECIFIC_METHOD_EXISTS = false; + if ($this->confLabinvent->labNameShort) { + $labshortname = $this->confLabinvent->labNameShort; + $this->d("lab name is set to $labshortname"); + $setAuthorizationsSpecific = "setAuthorizations_$labshortname"; + // Si une méthode spécifique (dans le controleur courant) existe pour CE labo, on l'appelle à la place de la méthode générale + // Par exemple pour l'IRAP, ça sera $this=>setAuthorizations_IRAP() : + // if (method_exists($this, 'setAuthorizations_IRAP')) $this->setAuthorizations_IRAP(); + if (method_exists($this, $setAuthorizationsSpecific)) { + $SPECIFIC_METHOD_EXISTS = true; + $this->$setAuthorizationsSpecific(); + } + } + // Sinon, on appelle la méthode générale + if (! $SPECIFIC_METHOD_EXISTS) $this->setAuthorizations(); } // initialize() diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 448e8d0..c8c9732 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -251,14 +251,81 @@ class MaterielsController extends AppController { } // beforeRender() + /* + * Méthode de définition des autorisations SPÉCIFIQUE au laboratoire IRAP + * + * Cette méthode surcharge la méthode générale "setAuthorizations()" ci-après. + * Elle doit donc d'abord appeler la méthode générale (voir étape 1) puis surcharger ou ajouter quelques règles (voir étape 2) + * + * Pour faire la même chose pour un autre labo qui s'appelerait LABO (selon la valeur donnée par $this->confLabinvent->labNameShort), + * il suffit de faire une COPIE de cette méthode et de la renommer "setAuthorizations_LABO" + * + * On doit faire ça dans CHAQUE controleur où l'on désire des adaptations + * (ici, c'est seulement pour le contrôleur des Matériels, donc toutes les actions sur la table 'materiels') + * + * Pour vérifier que ces règles spécifiques sont bien appliquées, aller sur la page des autorisations /pages/acls + * + */ + protected function setAuthorizations_IRAP() { + $this->d("SPECIFIC IRAP!"); + + // 1) On appelle d'abord la méthode générale + $this->setAuthorizations(); + + // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul + // - Adaptation de la règle pour "ajout par copie" + $this->setAuthorizationsForAction('add_by_copy', ['CREATED',0], [ + 'user' => ['CREATED',1], + 'resp' => 'default', + ]); + // - Adaptation de la règle pour "edit" (modif d'un matériel) + $this->setAuthorizationsForAction('edit', ['CREATED',0], [ + 'user' => ['CREATED',1], + 'resp' => ['CREATED',1], + //$admin = 'default', + //$super = 'default' // + champs techniques + ]); + } + // Méthode de définition des autorisations SPÉCIFIQUE au laboratoire CRAL + protected function setAuthorizations_CRAL() { + $this->d("SPECIFIC CRAL!"); + + // 1) On appelle d'abord la méthode générale + $this->setAuthorizations(); + + // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul + // Voir pour exemple la méthode setAuthorizations_IRAP() ci-dessus. + } + // Méthode de définition des autorisations SPÉCIFIQUE au laboratoire LATMOS + protected function setAuthorizations_LATMOS() { + $this->d("SPECIFIC CRAL!"); + + // 1) On appelle d'abord la méthode générale + $this->setAuthorizations(); + + // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul + // Voir pour exemple la méthode setAuthorizations_IRAP() ci-dessus. + } + // Méthode de définition des autorisations SPÉCIFIQUE au laboratoire IAS + protected function setAuthorizations_IAS() { + $this->d("SPECIFIC CRAL!"); + + // 1) On appelle d'abord la méthode générale + $this->setAuthorizations(); + + // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul + // Voir pour exemple la méthode setAuthorizations_IRAP() ci-dessus. + } + /* * @Override * - * Initialisation des autorisations pour les actions de ce controleur + * Initialisation des autorisations PAR DÉFAUT (générales à tous les labos) pour les actions de ce controleur * */ protected function setAuthorizations() { + //debug("GENERIC!"); // Action 'add' (ajout d'un nouveau matériel) => autorisé pour tous $this->setAuthorizationsForAction('add', 0); @@ -294,7 +361,7 @@ class MaterielsController extends AppController { // Action 'edit' (modif d'un matériel) $this->setAuthorizationsForAction('edit', ['CREATED',0], [ 'user' => ['CREATED',1], - //'resp' => ['CREATED',1], + 'resp' => ['CREATED',1], //$admin = 'default', //$super = 'default' // + champs techniques ]); diff --git a/src/Controller/SuivisController.php b/src/Controller/SuivisController.php index c2438d3..53d4505 100755 --- a/src/Controller/SuivisController.php +++ b/src/Controller/SuivisController.php @@ -13,6 +13,35 @@ class SuivisController extends AppController { /* + * Méthode de définition des autorisations SPÉCIFIQUE au laboratoire IRAP + * + * Cette méthode surcharge la méthode générale "setAuthorizations()" ci-après. + * Elle doit donc d'abord appeler la méthode générale (voir étape 1) puis surcharger ou ajouter quelques règles (voir étape 2) + * + * Pour faire la même chose pour un autre labo qui s'appelerait LABO (selon la valeur donnée par $this->confLabinvent->labNameShort), + * il suffit de faire une COPIE de cette méthode et de la renommer "setAuthorizations_LABO" + * + * On doit faire ça dans CHAQUE controleur où l'on désire des adaptations + * (ici, c'est seulement pour le contrôleur des Suivis, donc toutes les actions sur la table 'suivis') + * + * Pour vérifier que ces règles spécifiques sont bien appliquées, aller sur la page des autorisations /pages/acls + * + */ + protected function setAuthorizations_IRAP() { + $this->d("SPECIFIC IRAP!"); + + // 1) On appelle d'abord la méthode générale + $this->setAuthorizations(); + + // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul + // Par exemple, si je veux adapter la règle pour la modificaiton d'un suivi ("edit") : + $this->setAuthorizationsForAction('edit', 'add', [ + //'user' => ['default',0], + 'super' => ['default',0], + ]); + } + + /* * @Override * * Initialisation des autorisations pour les actions spécifiques à ce controleur -- libgit2 0.21.2