From 718dc8d190210d9873ed82c246f6d4bd8565fb4c Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Thu, 4 Jun 2020 20:32:00 +0200 Subject: [PATCH] ADAPTATION DE TOUS LES CONTROLEURS au nouveau système d'autorisations --- README.md | 14 +++++++++++--- src/Controller/AppController.php | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------ src/Controller/CategoriesController.php | 23 +++++++++++++++++++---- src/Controller/ConfigurationsController.php | 34 ++++++++++++++++++++++++++++++---- src/Controller/DocumentsController.php | 22 +++++++++++----------- src/Controller/EmpruntsController.php | 10 +++++----- src/Controller/FichemetrologiquesController.php | 6 ++++-- src/Controller/FormulesController.php | 34 +++++++++++++++++++++++++++++++--- src/Controller/FournisseursController.php | 10 ++++++---- src/Controller/GroupesMetiersController.php | 7 +++++-- src/Controller/GroupesThematiquesController.php | 6 ++++-- src/Controller/MaterielsController.php | 52 ++++++++++++++++++++++------------------------------ src/Controller/OrganismesController.php | 6 ++++-- src/Controller/PagesController.php | 38 ++++++++++++++++++++++++++++++++++++-- src/Controller/QrCodesController.php | 15 +++++++++++++++ src/Controller/SitesController.php | 6 ++++-- src/Controller/SousCategoriesController.php | 23 +++++++++++++++++++---- src/Controller/SuivisController.php | 23 +++++++++++++---------- src/Controller/SurCategoriesController.php | 22 ++++++++++++++++++---- src/Controller/TypeDocumentsController.php | 15 ++++++++++++++- src/Controller/TypeSuivisController.php | 15 ++++++++++++++- src/Controller/UnitesController.php | 4 +++- src/Controller/UsersController.php | 20 ++++++++++++++++++++ src/Template/Pages/acls.ctp | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------- tests/TestCase/Controller/MaterielsControllerTest.php | 4 ++-- tests/TestCase/Controller/PagesControllerTest.php | 13 +++++++++---- 26 files changed, 498 insertions(+), 155 deletions(-) diff --git a/README.md b/README.md index 265770a..2a4251d 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,17 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 03/06/2020 -Version: 3.7.9.30 +Date: 04/06/2020 +Version: 3.7.9.31 Author: EP Commentaire: - - NOUVELLE PAGE AFFICHANT LES AUTORISATIONS DYNAMIQUEMENT (/pages/acls ou /pages/acls/#nom_du_controleur) + - 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) + - 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) - Renforcement tests suivis et emprunts (materiel validated only) et refactorisations @@ -108,6 +112,10 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi ----------------------------------------------------------------------------------------------------------- +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) + 03/06/2020 v3.7.9.29 (EP) - NOUVEAU SYSTEME D'AUTORISATION DES ACTIONS => CENTRALISÉ et testé OK => TOUS les tests passent sauf certains qui ne passent plus car les nouvelles conditions sont plus strictes diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 4b33ac8..1fb99ed 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -177,6 +177,15 @@ class AppController extends Controller ]; // default_authorizations + const default_authorizations_adminonly = [ + 'default' => 0, + 'user' => -1, + 'resp' => -1, + 'admin' => 'default', + 'adminp' => 'default', + 'super' => 'default' + ]; + /* * Tableau des autorisations pour les actions du controleur * @@ -186,11 +195,19 @@ class AppController extends Controller * On le complètera ensuite pour les autres actions */ //protected $is_authorized_action = []; + // Pour tous les controleurs protected $is_authorized_action = [ - 'add' => self::default_authorizations, + // autorisé pour tous : 'index' => self::default_authorizations, 'view' => self::default_authorizations, 'find' => self::default_authorizations, + // admin(+) only : + 'add' => self::default_authorizations_adminonly, + 'edit' => self::default_authorizations_adminonly, + 'delete' => self::default_authorizations_adminonly, + // Uniquement pour le controleur de pages PagesController (1 seule action autorisée : display) + //'display' => self::default_authorizations, + ]; @@ -308,11 +325,11 @@ class AppController extends Controller * ] * */ - //protected function setAuthorizationForAction($action, $default, $user=null, $resp=null, $admin=null, $adminp=null, $super=null) { + //protected function setAuthorizationsForAction($action, $default, $user=null, $resp=null, $admin=null, $adminp=null, $super=null) { // php7: - //protected function setAuthorizationForAction(string $action, $default, array $authorizations=null) { + //protected function setAuthorizationsForAction(string $action, $default, array $authorizations=null) { // php5: - protected function setAuthorizationForAction($action, $default, array $authorizations=[]) { + protected function setAuthorizationsForAction($action, $default, array $authorizations=[]) { /* * Paramètres "nommés" simulés avec le paramètre $authorizations : * (https://phil.tech/2013/named-parameters-in-php) @@ -391,7 +408,7 @@ class AppController extends Controller in_array(0,['add','edit'])) => renvoie TRUE !!! 0 == 'add' => renvoie TRUE !!! */ - if ($default!==0 && in_array($default,['add','edit'])) { + if ($default!==0 && in_array($default,['add','edit','admission'])) { $action_rules['default'] = $this->is_authorized_action[$default]['default']; } // - règle pour chaque role @@ -427,7 +444,7 @@ class AppController extends Controller debug("action_rules:"); debug($action_rules); } - } // setAuthorizationForAction + } // setAuthorizationsForAction public function getAuthorizations($action=null, $role=null) { @@ -514,6 +531,16 @@ class AppController extends Controller case 'Super Administrateur': $role='super'; } + /* + * Cas particulier du controleur de pages (PagesController) et de son unique action "display" + * => on remplace l'action par le nom de la page + */ + if ($this->name == 'Pages') { + // Si la page n'existe pas => accès rejeté + $action = "display/".$this->page; + if (! in_array($action, array_keys($this->is_authorized_action))) return false; + } + // Pour cette action et ce role : //debug("role is $role"); $access_condition = $this->is_authorized_action[$action][$role]; @@ -642,7 +669,7 @@ class AppController extends Controller // 3) return (1) && (2) $condition_result = $condition_on_status_result && $condition_on_belonging_result; $this->d("2) Condition globale (a && b) evaluée à :"); $this->d2($condition_result); - return$condition_result; + return $condition_result; } /* @@ -790,10 +817,10 @@ class AppController extends Controller * @param string $id */ // public function isAuthorizedAction(AppController $controller, $roleLong, $action, $id=null, $user=null) { - public function isAuthorizedAction2($controller, $roleLong, $action, $id = null, $user = null) + public function OLD_isAuthorizedAction2($controller, $roleLong, $action, $id = null, $user = null) { /* Cette fonction n'est pas encore appelée pour de vrai, juste pour test, donc inutile d'afficher ça : - $this->myDebug("step 2B (intermediaire general): AppController.isAuthorizedAction2(controller, $roleLong, $action, $id, user)"); + $this->myDebug("step 2B (intermediaire general): AppController.OLD_isAuthorizedAction2(controller, $roleLong, $action, $id, user)"); $this->myDebug("- controller name is {$controller->name}"); */ //$this->myDebug("- user is ", $user); @@ -872,7 +899,7 @@ class AppController extends Controller } if ($doDEBUG) debug("CAS6"); - return $this->isAuthorizedAction2($controller, $this->getPreviousRole($role), $action, $id, $user); + return $this->OLD_isAuthorizedAction2($controller, $this->getPreviousRole($role), $action, $id, $user); } // @todo @@ -1037,6 +1064,7 @@ class AppController extends Controller * Autorisations PAR DÉFAUT * Appelé à la fin de isAuthorized() de chaque controller si cette fonction n'a pas return true */ + /* (EP) migré directement dans isAuthorized() public function isAuthorizedCommons($user) { $this->myDebug("step 2B (intermediaire general): AppController.isAuthorizedCommons(user)"); @@ -1050,11 +1078,11 @@ class AppController extends Controller // Seul Administration (et +) peut ajouter, supprimer ou modifier (pour la plupart des controleurs) if (in_array($action, ['add', 'edit', 'delete'])) return ($this->USER_IS_ADMIN_AT_LEAST()); - /* + /S if ($this->USER_IS_ADMIN_AT_LEAST()) return true; // Les autres n'y ont pas accès return false; - */ + S/ // Sinon, on applique les règles générales par défaut // Ne pas faire ça car $this sera interprété comme le controleur SPECIFIQUE et non AppController : @@ -1062,6 +1090,7 @@ class AppController extends Controller // Donc, il faut être explicite : return AppController::isAuthorized($user); } + */ /** * @@ -1088,14 +1117,29 @@ class AppController extends Controller public function isAuthorized($user, $action=null, $id=null, $role=null) { //$action=null, $id=null, $role=null, $userCname=null) { - //debug("here1"); + $this->myDebug("step 2C (general): AppController.isAuthorized()"); // $user est l'equivalent de $this->LdapAuth->user() $this->myDebug("- user is:", $user); + //$action = $this->getActionPassed(); if (!$action) $action = $this->a; + $this->myDebug("- action is: $action"); + + //if (!$id) $id = $this->getIdPassed(); + if (!$id) $id = $this->e_id; + $IS_RELATED_ENTITY_ID = false; + return $this->isAuthorizedAction($action, $id, $IS_RELATED_ENTITY_ID); // $user, $userCname + + // LA SUITE EST A VIRER + + + + + + // $role = $this->getUserRole($user); /* * // ATTENTION, normalement, on devrait tester si role est défini..., mais c'est sans doute pas utile * // cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html @@ -1124,9 +1168,13 @@ class AppController extends Controller //$action = $this->getActionPassed(); // error_log($action); - //$this->myDebug("- action is $action"); - $this->myDebug("- action is $action"); + + /* + // Seul Administration (et +) peut ajouter, supprimer ou modifier (pour la plupart des controleurs) + if (in_array($action, ['add', 'edit', 'delete'])) return ($this->USER_IS_ADMIN_AT_LEAST()); + */ + // On autorise ou pas l’action demandée : // - Super-Admin peut accéder à toutes les actions //if ($role == 'Super Administrateur') return true; @@ -1146,9 +1194,7 @@ class AppController extends Controller // Materiels 'getDateGarantie' */ - ])) { - return true; - } + ])) return true; // - Pour toutes les autres actions, par défaut => accès refusé (denied) return false; diff --git a/src/Controller/CategoriesController.php b/src/Controller/CategoriesController.php index 703c8b1..02c3dc8 100755 --- a/src/Controller/CategoriesController.php +++ b/src/Controller/CategoriesController.php @@ -16,6 +16,19 @@ class CategoriesController extends AppController { return "La"; } + + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + // Action 'getFromCategorie' + $this->setAuthorizationsForAction('getBySurCategorie', 0); + // Action 'getAll' + $this->setAuthorizationsForAction('getAll', 0); + } /** * @@ -25,6 +38,7 @@ class CategoriesController extends AppController * */ //public function isAuthorized($user) + /* public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { // $configuration = $this->confLabinvent; @@ -42,12 +56,12 @@ class CategoriesController extends AppController return true; } - /* + /S * // Super-Admin peut accéder à chaque action * if($role == 'Super Administrateur') return true; - */ + S/ - /* + /S * // Administration peut ajouter, supprimer ou modifier une categorie * //if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true; * if( in_array($action,['add','delete','edit'])) { @@ -56,7 +70,7 @@ class CategoriesController extends AppController * // Les autres n'y ont pas accès * return false; * } - */ + S/ // Par défaut // return false; @@ -64,6 +78,7 @@ class CategoriesController extends AppController return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/ConfigurationsController.php b/src/Controller/ConfigurationsController.php index 92e18d7..08a01e9 100644 --- a/src/Controller/ConfigurationsController.php +++ b/src/Controller/ConfigurationsController.php @@ -13,12 +13,28 @@ use Migrations\Table; class ConfigurationsController extends AppController { - /** - * * - * !!! ATTENTION !!! + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur * - * Nommer la variable configuration transmise à la vue : configurationObj */ + protected function setAuthorizations() { + // Toutes les actions sont INTERDITES sauf 'view' et 'edit' et 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ée + // => 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'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]); + + } + /** * @@ -27,6 +43,7 @@ class ConfigurationsController extends AppController * @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)"); @@ -47,7 +64,16 @@ class ConfigurationsController extends AppController // return false; return parent::isAuthorized($user); } + */ + + /** + * * + * !!! ATTENTION !!! + * + * Nommer la variable configuration transmise à la vue : configurationObj + */ + /** * View method * diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 06c5ce7..9c89300 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -32,34 +32,34 @@ class DocumentsController extends AppController protected function setAuthorizations() { // Action 'add' (ajout d'une nouvelle entité) - $this->setAuthorizationForAction('add', ['VALIDATED',1]); - //$this->setAuthorizationForAction('edit', ['VALIDATED',1]); - //$this->setAuthorizationForAction('add', 'edit'); + $this->setAuthorizationsForAction('add', ['VALIDATED',1]); + //$this->setAuthorizationsForAction('edit', ['VALIDATED',1]); + //$this->setAuthorizationsForAction('add', 'edit'); // Action 'edit' (modif d'une entité) => comme pour 'add' - $this->setAuthorizationForAction('edit', 'add', [ + $this->setAuthorizationsForAction('edit', 'add', [ 'super' => ['default',0] ]); // Action 'edit' (modif d'une entité) => comme pour 'add' - $this->setAuthorizationForAction('delete', 'add', [ + $this->setAuthorizationsForAction('delete', 'add', [ 'super' => ['default',0] ]); // Action 'ficheMateriel' - $this->setAuthorizationForAction('ficheMateriel', 0); + $this->setAuthorizationsForAction('ficheMateriel', 0); // Action 'ficheMaterielPdf' // DOMPDF - $this->setAuthorizationForAction('ficheMaterielPdf', 0); + $this->setAuthorizationsForAction('ficheMaterielPdf', 0); // Action 'mailDevis' - $this->setAuthorizationForAction('mailDevis', 0); + $this->setAuthorizationsForAction('mailDevis', 0); // Action 'admission' - $this->setAuthorizationForAction('admission', ['VALIDATED',0], ['user'=>-1, 'resp'=>-1]); + $this->setAuthorizationsForAction('admission', ['VALIDATED',0], ['user'=>-1, 'resp'=>-1]); // Action 'admissionPdf' - $this->setAuthorizationForAction('admissionPdf', 'admission', ['user'=>-1, 'resp'=>-1]); + $this->setAuthorizationsForAction('admissionPdf', 'admission', ['user'=>-1, 'resp'=>-1]); // Action 'sortie' - $this->setAuthorizationForAction('sortie', ['ARCHIVED',0], ['user'=>-1, 'resp'=>-1]); + $this->setAuthorizationsForAction('sortie', ['ARCHIVED',0], ['user'=>-1, 'resp'=>-1]); } // setAuthorizations diff --git a/src/Controller/EmpruntsController.php b/src/Controller/EmpruntsController.php index 81d224d..b3f4b90 100755 --- a/src/Controller/EmpruntsController.php +++ b/src/Controller/EmpruntsController.php @@ -107,12 +107,12 @@ class EmpruntsController extends AppController protected function setAuthorizations() { // Action 'add' (ajout d'une nouvelle entité) - $this->setAuthorizationForAction('add', ['VALIDATED',1]); - //$this->setAuthorizationForAction('edit', ['VALIDATED',1]); - //$this->setAuthorizationForAction('add', 'edit'); + $this->setAuthorizationsForAction('add', ['VALIDATED',1]); + //$this->setAuthorizationsForAction('edit', ['VALIDATED',1]); + //$this->setAuthorizationsForAction('add', 'edit'); // Action 'edit' (modif d'une entité) => comme pour 'add' - $this->setAuthorizationForAction('edit', 'add', [ + $this->setAuthorizationsForAction('edit', 'add', [ //'user' => 0, //'user' => -1, //'user' => ['default',0], @@ -120,7 +120,7 @@ class EmpruntsController extends AppController 'super' => ['default',0], ]); // Action 'edit' (modif d'une entité) => comme pour 'add' - $this->setAuthorizationForAction('delete', 'add', [ + $this->setAuthorizationsForAction('delete', 'add', [ //'super' => ['default',0] 'super' => 'edit' ]); diff --git a/src/Controller/FichemetrologiquesController.php b/src/Controller/FichemetrologiquesController.php index 9f3ead1..93fb0a5 100644 --- a/src/Controller/FichemetrologiquesController.php +++ b/src/Controller/FichemetrologiquesController.php @@ -22,10 +22,11 @@ class FichemetrologiquesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { - /* + /S * $configuration = $this->confLabinvent; * $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; * @@ -41,11 +42,12 @@ class FichemetrologiquesController extends AppController * } * * //return parent::isAuthorized($user); - */ + S/ // Tout profil peut tout faire !!! (A affiner, non ?) return true; } + */ /** * Index method diff --git a/src/Controller/FormulesController.php b/src/Controller/FormulesController.php index 28cef54..9848c5d 100644 --- a/src/Controller/FormulesController.php +++ b/src/Controller/FormulesController.php @@ -11,6 +11,33 @@ use Cake\ORM\TableRegistry; class FormulesController extends AppController { + + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + + // Action 'add' (ajout d'une nouvelle entité) => autorisé pour tous + $this->setAuthorizationsForAction('add', 0); + + // Action 'edit' (modif d'une entité) + $this->setAuthorizationsForAction('edit', [0,1], [ + 'admin' => 0, + 'super' => 0, + ]); + + // Action 'delete' (suppression d'une entité) => comme pour 'edit' + $this->setAuthorizationsForAction('delete', 'edit', [ + 'admin' => 0, + 'super' => 0, + ]); + + } // setAuthorizations + + /** * Give authorization for formules * @@ -18,6 +45,7 @@ class FormulesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { @@ -27,10 +55,9 @@ class FormulesController extends AppController // $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; $role = $this->getUserRole($user); - // Admin + peut tout faire + // Admin(+) peut tout faire // if($this->userHasRoleAtLeast('Administration')) return true; - if ($this->USER_IS_ADMIN_AT_LEAST()) - return true; + if ($this->USER_IS_ADMIN_AT_LEAST()) return true; // Les autres users if (in_array($action, [ @@ -48,6 +75,7 @@ class FormulesController extends AppController // Par défaut return parent::isAuthorized($user); } + */ /** * Index method diff --git a/src/Controller/FournisseursController.php b/src/Controller/FournisseursController.php index 395ad36..b43b3b6 100644 --- a/src/Controller/FournisseursController.php +++ b/src/Controller/FournisseursController.php @@ -20,6 +20,7 @@ class FournisseursController extends AppController * @return boolean */ //public function isAuthorized($user) + /* public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { $this->myDebug("step 2A (specific): FournisseursController.isAuthorized(user)"); @@ -33,21 +34,21 @@ class FournisseursController extends AppController $role = $this->getUserRole($user); // TOUS - /* + /S * if (in_array($action, ['view', 'index'])) { * return true; * } - */ + S/ // Super-Admin peut accéder à chaque action // if($role == 'Super Administrateur') return true; - /* + /S * // Administration + peut ajouter, supprimer ou modifier * if( in_array($action,['add'])) { * return true; * } - */ + S/ // Tout le monde peut tout faire sur les fournisseurs //if( in_array($action,['add', 'edit', 'delete'])) { if ( in_array( @@ -67,6 +68,7 @@ class FournisseursController extends AppController return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/GroupesMetiersController.php b/src/Controller/GroupesMetiersController.php index e499678..dd27067 100755 --- a/src/Controller/GroupesMetiersController.php +++ b/src/Controller/GroupesMetiersController.php @@ -12,6 +12,7 @@ use Cake\ORM\TableRegistry; class GroupesMetiersController extends AppController { + /** * Give authorization for groupes metiers * @@ -19,6 +20,7 @@ class GroupesMetiersController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { @@ -43,7 +45,7 @@ class GroupesMetiersController extends AppController * if ($this->userHasRole('Administration Plus')) { * if ($action != 'delete') return true; * } - */ + S/ /* * // Action add, ... seulement pour Admin et + @@ -54,7 +56,7 @@ class GroupesMetiersController extends AppController * // Les autres n'y ont pas accès * return false; * } - */ + S/ // Par défaut // return false; @@ -62,6 +64,7 @@ class GroupesMetiersController extends AppController return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/GroupesThematiquesController.php b/src/Controller/GroupesThematiquesController.php index 8b6b047..2ac1ec2 100755 --- a/src/Controller/GroupesThematiquesController.php +++ b/src/Controller/GroupesThematiquesController.php @@ -20,6 +20,7 @@ class GroupesThematiquesController extends AppController * @return boolean */ //public function isAuthorized($user) + /* public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { // return (new GroupesMetiersController())->isAuthorized($user); @@ -34,7 +35,7 @@ class GroupesThematiquesController extends AppController * if (in_array($action, ['view', 'index'])) { * return true; * } - */ + S/ // Super-Admin peut accéder à chaque action // if($role == 'Super Administrateur') return true; @@ -45,13 +46,14 @@ class GroupesThematiquesController extends AppController * if ($this->USER_IS_ADMIN_AT_LEAST()) return true; * return false; * } - */ + S/ // Par défaut // return false; // return parent::isAuthorized($user); return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index b0c5f1e..448e8d0 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -260,19 +260,11 @@ class MaterielsController extends AppController { */ protected function setAuthorizations() { - // Action 'add' (ajout d'un nouveau matériel) => autorisé par défaut pour tous les controleurs - //$this->is_authorized_action['add'] = $this->default_authorizations; - //$this->is_authorized_action['add']['default'] = 1; - //$this->setAuthorizationForAction('add', [0,0], [ - /* - $this->setAuthorizationForAction('add', 0, [ - //'user' => [0,0], - //'resp' => [0,0], - ]); - */ + // Action 'add' (ajout d'un nouveau matériel) => autorisé pour tous + $this->setAuthorizationsForAction('add', 0); // Action 'add' (ajout d'un nouveau matériel par copie d'un autre) - $this->setAuthorizationForAction('add_by_copy', ['CREATED',0], [ + $this->setAuthorizationsForAction('add_by_copy', ['CREATED',0], [ 'user' => ['CREATED',1], //'resp' => ['CREATED',0], 'resp' => 'default', @@ -282,7 +274,7 @@ class MaterielsController extends AppController { /* Actions autorisées par défaut par AppController : index et view // - Action 'index' (affichage de la liste des matériels) - $this->setAuthorizationForAction('index', + $this->setAuthorizationsForAction('index', $default = [0,0] // = + vue spécialisée PAR statut //$user = 'default', // vue simplifiée tout statut confondu (sauf ARCHIVED) //$resp = 'default', @@ -290,7 +282,7 @@ class MaterielsController extends AppController { //$super = 'default' ); // - Action 'view' (vue détaillée d'un matériel) - $this->setAuthorizationForAction('view', + $this->setAuthorizationsForAction('view', $default = [0,0] //$user = 'default', //$resp = 'default', @@ -300,7 +292,7 @@ class MaterielsController extends AppController { */ // Action 'edit' (modif d'un matériel) - $this->setAuthorizationForAction('edit', ['CREATED',0], [ + $this->setAuthorizationsForAction('edit', ['CREATED',0], [ 'user' => ['CREATED',1], //'resp' => ['CREATED',1], //$admin = 'default', @@ -308,19 +300,19 @@ class MaterielsController extends AppController { ]); // Action 'delete' (suppression d'un matériel) - $this->setAuthorizationForAction('delete', ['CREATED',1]); + $this->setAuthorizationsForAction('delete', ['CREATED',1]); // Action 'devalidate' (repasser le matériel au statut 'CREATED', c'est à dire le dé-valider ou l'invalider) // (VALIDATED ou TBA ou ARCHIVED) => CREATED - //$this->setAuthorizationForAction('devalidate', - $this->setAuthorizationForAction('statusCreated', ['NOT CREATED',0], [ + //$this->setAuthorizationsForAction('devalidate', + $this->setAuthorizationsForAction('statusCreated', ['NOT CREATED',0], [ 'user' => -1, // PAS AUTORISÉ 'resp' => ['NOT CREATED',1] ]); // Action 'updgrade' (avancement du statut d'un matériel) // CREATED => VALIDATED => TBA => ARCHIVED - $this->setAuthorizationForAction('upgrade', ['NOT ARCHIVED',0], [ // En fait, l'action fait juste passer au statut "suivant" + $this->setAuthorizationsForAction('upgrade', ['NOT ARCHIVED',0], [ // En fait, l'action fait juste passer au statut "suivant" //$default = ['PREVIOUS',0], // le matériel doit avoir le statut "précédent" du statut actuel 'user' => ['VALIDATED',1], // SEULEMENT l'action "demande d'archivage" //$resp = ['VALIDATED',1] // SEULEMENT l'action "demande d'archivage" @@ -329,12 +321,12 @@ class MaterielsController extends AppController { ]); // Action 'updgrade' (avancement du statut d'un matériel) // - Validation d'un materiel (passe à VALIDATED) : CREATED => VALIDATED - $this->setAuthorizationForAction('statusValidated', ['CREATED',0], [ + $this->setAuthorizationsForAction('statusValidated', ['CREATED',0], [ 'user' => -1, // interdit 'resp' => -1 // interdit ]); // - Demande d'archivage : VALIDATED => TBA - $this->setAuthorizationForAction('statusTobearchived', ['VALIDATED',0], [ + $this->setAuthorizationsForAction('statusTobearchived', ['VALIDATED',0], [ //$user = ['default',1], 'user' => ['VALIDATED',1], //$resp = ['default',1] @@ -342,25 +334,25 @@ class MaterielsController extends AppController { 'resp' => 'user' ]); // - Archivage : TBA => ARCHIVED - $this->setAuthorizationForAction('statusArchived', ['TOBEARCHIVED',0], [ + $this->setAuthorizationsForAction('statusArchived', ['TOBEARCHIVED',0], [ 'user' => -1, // interdit 'resp' => -1 // interdit ]); // Action 'printLabelRuban' (impression d'une étiquette) - $this->setAuthorizationForAction('printLabelRuban', ['VALIDATED && conf.hasPrinter',0] ); + $this->setAuthorizationsForAction('printLabelRuban', ['VALIDATED && conf.hasPrinter',0] ); // Action 'execActions' - $this->setAuthorizationForAction('execActions', 0, [ // autorisé sans condition + $this->setAuthorizationsForAction('execActions', 0, [ // autorisé sans condition 'user' => -1, // PAS AUTORISÉ 'resp' => -1 // PAS AUTORISÉ ]); // Action 'export' - $this->setAuthorizationForAction('export', 0, [// autorisé sans condition + $this->setAuthorizationsForAction('export', 0, [// autorisé sans condition 'user' => -1 // interdit ]); - $this->setAuthorizationForAction('getDateGarantie', 0); // autorisé sans condition - $this->setAuthorizationForAction('setLabelIsPlaced', 0); // autorisé sans condition - $this->setAuthorizationForAction('setLabelIsNotPlaced', 0); // autorisé sans condition + $this->setAuthorizationsForAction('getDateGarantie', 0); // autorisé sans condition + $this->setAuthorizationsForAction('setLabelIsPlaced', 0); // autorisé sans condition + $this->setAuthorizationsForAction('setLabelIsNotPlaced', 0); // autorisé sans condition } // _setAuthorizations() @@ -495,7 +487,7 @@ class MaterielsController extends AppController { * //return $this->isAuthorizedAction($this, $user, $role, $action, $id); * Tout le reste en dessous de cette ligne devient inutile !!! */ - ///////$this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->userRole, $this->a, $id, $user)); + ///////$this->myDebug("isAuthorizedAction ? " . $this->OLD_isAuthorizedAction2($this, $this->userRole, $this->a, $id, $user)); //return $this->isAuthorizedAction(); ////return $this->isAuthorizedAction($user=$user); /* @@ -537,8 +529,8 @@ class MaterielsController extends AppController { // (EP 202005) inutile ///if (!$userCname) $userCname = $this->userCname; - //$this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->userRole, $this->a, $id, $user)); - $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->user_role, $this->a, $id, $user)); + //$this->myDebug("isAuthorizedAction ? " . $this->OLD_isAuthorizedAction2($this, $this->userRole, $this->a, $id, $user)); + $this->myDebug("isAuthorizedAction ? " . $this->OLD_isAuthorizedAction2($this, $this->user_role, $this->a, $id, $user)); //return $this->isAuthorizedActionForRole($role, $action, $id); // $user, $userCname if ($action=='add' && $id>0) $action = 'add_by_copy'; return $this->isAuthorizedAction($action, $id); // $user, $userCname diff --git a/src/Controller/OrganismesController.php b/src/Controller/OrganismesController.php index c73f42a..b19ad68 100755 --- a/src/Controller/OrganismesController.php +++ b/src/Controller/OrganismesController.php @@ -24,6 +24,7 @@ class OrganismesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { @@ -32,7 +33,7 @@ class OrganismesController extends AppController * $configuration = $this->confLabinvent; * $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; * $action = $this->request->getAttribute('params')['action']; - */ + S/ /* * $action = $this->getActionPassed(); * $role = $this->getUserRole($user); @@ -54,13 +55,14 @@ class OrganismesController extends AppController * if($this->userHasRoleAtLeast('Administration Plus')) { * if($action != 'delete') return true; * } - */ + S/ // Par défaut // return false; // return parent::isAuthorized($user); return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/PagesController.php b/src/Controller/PagesController.php index e2bf603..e4c9b2b 100755 --- a/src/Controller/PagesController.php +++ b/src/Controller/PagesController.php @@ -95,12 +95,45 @@ class PagesController extends AppController // 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 ( $this->page == 'about' ) $this->LdapAuth->allow(['display']); - //if ( in_array($page, ['about', 'tools']) ) $this->LdapAuth->allow(['display']); + //if ( $this->page == 'about' ) $this->LdapAuth->allow(['display']); + if ( in_array($this->page, ['about', 'acls']) ) $this->LdapAuth->allow(['display']); } } + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + + // On supprime les autres actions par défaut (add, view, index, find) + //foreach (array_keys($this->is_authorized_action[]) as $a) if ($a != 'display') unset($this->is_authorized_action[$a]); + $this->is_authorized_action = []; + + // Action display 'about' (affichage de la page 'A propos') + $this->setAuthorizationsForAction('display/about', 0); + + // Action display 'acls' (affichage de la page 'Autorisations') + $this->setAuthorizationsForAction('display/acls', 0); + + // Action display 'home' (affichage de la page 'Acceuil') + $this->setAuthorizationsForAction('display/home', 0); + + // Action display 'tools' (affichage de la page 'menu Outils') + // admin (+) only + $this->setAuthorizationsForAction('display/tools', -1, ['admin'=>0, 'super'=>0]); + + // Action display 'infos' (affichage de la page 'Informations techniques sur le serveur') + // superadmin only + $this->setAuthorizationsForAction('display/infos', -1, ['super'=>0]); + + } + + + /* public function isAuthorized($user, $action=null, $id=null, $role=null, $userCname=null) { $this->myDebug("step 2A (specific): PagesController.isAuthorized(user)"); @@ -140,6 +173,7 @@ class PagesController extends AppController // sinon, règle par défaut donnée par AppController return parent::isAuthorized($user); } + */ /** diff --git a/src/Controller/QrCodesController.php b/src/Controller/QrCodesController.php index 18b336e..e3248f5 100644 --- a/src/Controller/QrCodesController.php +++ b/src/Controller/QrCodesController.php @@ -7,6 +7,20 @@ use \PHPQRCode\QRcode; class QrCodesController extends AppController { + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + // On supprime les actions par défaut + $this->is_authorized_action = []; + // Action 'creer' + $this->setAuthorizationsForAction('creer', 0); + } + + /* public function isAuthorized($user, $action=null, $id=null, $role=null, $userCname=null) { //return ($this->action == 'creer'); @@ -16,6 +30,7 @@ class QrCodesController extends AppController // (on appelle la méthode isAuthorized() de AppController) //return parent::isAuthorized($user); } // isAuthorizedAction() + */ // @todo Autoriser "creer" dans isAuthorized de ce controleur, et non pas dans celui de AppController !!! diff --git a/src/Controller/SitesController.php b/src/Controller/SitesController.php index 81cd9e3..06f02ec 100755 --- a/src/Controller/SitesController.php +++ b/src/Controller/SitesController.php @@ -19,6 +19,7 @@ class SitesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { @@ -26,7 +27,7 @@ class SitesController extends AppController * $configuration = $this->confLabinvent; * $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; * $action = $this->request->getAttribute('params')['action']; - */ + S/ $action = $this->getActionPassed(); $role = $this->getUserRole($user); @@ -44,11 +45,12 @@ class SitesController extends AppController * if($this->userHasRoleAtLeast('Administration Plus')) { * if($action != 'delete') return true; * } - */ + S/ // return false; return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/SousCategoriesController.php b/src/Controller/SousCategoriesController.php index b5e9020..39181fd 100755 --- a/src/Controller/SousCategoriesController.php +++ b/src/Controller/SousCategoriesController.php @@ -17,6 +17,19 @@ class SousCategoriesController extends AppController return "La"; } + + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + // Action 'getByCategorie' + $this->setAuthorizationsForAction('getByCategorie', 0); + } + + /** * Give authorization for sous categories * @@ -24,11 +37,12 @@ class SousCategoriesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { $action = $this->getActionPassed(); - /* + /S * $configuration = $this->confLabinvent; * $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; * $action = $this->request->getAttribute('params')['action']; @@ -38,7 +52,7 @@ class SousCategoriesController extends AppController * * // Administration peut ajouter, supprimer ou modifier une sous categorie * if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true; - */ + S/ // if (in_array($action, ['getByCategorie', 'view', 'index'])) { if (in_array($action, [ @@ -46,15 +60,16 @@ class SousCategoriesController extends AppController ])) return true; - /* + /S * if($this->userHasRoleAtLeast('Administration Plus')) { * if($action != 'delete') return true; * } * * return false; - */ + S/ return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/SuivisController.php b/src/Controller/SuivisController.php index d59bf3f..c2438d3 100755 --- a/src/Controller/SuivisController.php +++ b/src/Controller/SuivisController.php @@ -12,31 +12,34 @@ use Cake\ORM\TableRegistry; class SuivisController extends AppController { - //@Override parent + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ protected function setAuthorizations() { - //debug("************************************************************* HERE HERE"); // Action 'add' (ajout d'une nouvelle entité) - $this->setAuthorizationForAction('add', ['VALIDATED',1]); - //$this->setAuthorizationForAction('edit', ['VALIDATED',1]); - //$this->setAuthorizationForAction('add', 'edit'); + $this->setAuthorizationsForAction('add', ['VALIDATED',1]); + //$this->setAuthorizationsForAction('edit', ['VALIDATED',1]); + //$this->setAuthorizationsForAction('add', 'edit'); // Action 'edit' (modif d'une entité) => comme pour 'add' - $this->setAuthorizationForAction('edit', 'add', [ + $this->setAuthorizationsForAction('edit', 'add', [ //'user' => 0, //'user' => -1, 'super' => ['default',0], ]); - // Action 'edit' (modif d'une entité) => comme pour 'add' - $this->setAuthorizationForAction('delete', 'add', [ + // Action 'delete' (suppression d'une entité) => comme pour 'add' + $this->setAuthorizationsForAction('delete', 'add', [ //'super' => ['default',0] 'super' => 'edit' ]); // Action 'getNextDate' - $this->setAuthorizationForAction('getNextDate', 0); - + $this->setAuthorizationsForAction('getNextDate', 0); } // setAuthorizations diff --git a/src/Controller/SurCategoriesController.php b/src/Controller/SurCategoriesController.php index fa5bd92..a63df9c 100755 --- a/src/Controller/SurCategoriesController.php +++ b/src/Controller/SurCategoriesController.php @@ -17,6 +17,18 @@ class SurCategoriesController extends AppController return "La"; } + + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + // Action 'getFromCategorie' + $this->setAuthorizationsForAction('getFromCategorie', 0); + } + /** * Give authorization for sur categories * @@ -24,11 +36,12 @@ class SurCategoriesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { $action = $this->getActionPassed(); - /* + /S * $configuration = $this->confLabinvent; * $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role']; * $action = $this->request->getAttribute('params')['action']; @@ -38,7 +51,7 @@ class SurCategoriesController extends AppController * * // Administration peut ajouter, supprimer ou modifier une sous categorie * if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true; - */ + S/ // if (in_array($action, ['getByCategorie', 'view', 'index'])) { if (in_array($action, [ @@ -46,15 +59,16 @@ class SurCategoriesController extends AppController ])) return true; - /* + /S * if($this->userHasRoleAtLeast('Administration Plus')) { * if($action != 'delete') return true; * } * * return false; - */ + S/ return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/TypeDocumentsController.php b/src/Controller/TypeDocumentsController.php index 6ce38bb..e16ae27 100755 --- a/src/Controller/TypeDocumentsController.php +++ b/src/Controller/TypeDocumentsController.php @@ -12,6 +12,17 @@ use Cake\ORM\TableRegistry; class TypeDocumentsController extends AppController { + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + // Actions autorisées seulement à superadmin + foreach (['add', 'edit', 'delete'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]); + } + /** * Give authorization for types suivis * @@ -19,6 +30,7 @@ class TypeDocumentsController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { @@ -42,9 +54,10 @@ class TypeDocumentsController extends AppController * } * * return false; - */ + S/ return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/TypeSuivisController.php b/src/Controller/TypeSuivisController.php index 1d0831d..e5d0477 100755 --- a/src/Controller/TypeSuivisController.php +++ b/src/Controller/TypeSuivisController.php @@ -12,6 +12,17 @@ use Cake\ORM\TableRegistry; class TypeSuivisController extends AppController { + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + // Actions autorisées seulement à superadmin + foreach (['add', 'edit', 'delete'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]); + } + /** * Give authorization for types suivis * @@ -20,6 +31,7 @@ class TypeSuivisController extends AppController * @return boolean */ //public function isAuthorized($user) + /* public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { /* @@ -42,9 +54,10 @@ class TypeSuivisController extends AppController * } * * return false; - */ + S/ return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/UnitesController.php b/src/Controller/UnitesController.php index 453bbb9..70f5cbe 100644 --- a/src/Controller/UnitesController.php +++ b/src/Controller/UnitesController.php @@ -19,6 +19,7 @@ class UnitesController extends AppController * $user * @return boolean */ + /* //public function isAuthorized($user) public function isAuthorized($user, $action = null, $id=null, $role=null, $userCname=null) { @@ -41,9 +42,10 @@ class UnitesController extends AppController * } * * return false; - */ + S/ return $this->isAuthorizedCommons($user); } + */ /** * Index method diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php index 7b4cf76..dbde2ea 100755 --- a/src/Controller/UsersController.php +++ b/src/Controller/UsersController.php @@ -51,6 +51,24 @@ class UsersController extends AppController $this->LdapAuth->allow(['logout']); } + + /* + * @Override + * + * Initialisation des autorisations pour les actions spécifiques à ce controleur + * + */ + protected function setAuthorizations() { + + // Actions autorisées à tous + foreach (['login', 'logout', 'getLdapLogin', 'getLdapEmail', 'indexRecap'] as $action) $this->setAuthorizationsForAction($action, 0); + + // Action autorisées seulement à superadmin + // TODO: affiner dans le cas d'un LDAP : même superadmin ne doit pas pouvoir supprimer ou modifier (sauf certains attributs) un utilisateur + foreach (['add', 'edit', 'delete'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]); + + } // setAuthorizations + // 2) APRES connexion /** * Give authorization for users @@ -59,6 +77,7 @@ class UsersController extends AppController * $user * @return boolean */ + /* public function isAuthorized($user, $action=null, $id=null, $role=null, $userCname=null) { // $configuration = $this->confLabinvent; @@ -83,6 +102,7 @@ class UsersController extends AppController // return false; return parent::isAuthorized($user); } + */ // ref: https://book.cakephp.org/4/fr/controllers/components/authentication.html#identifier-les-utilisateurs-et-les-connecter public function login() diff --git a/src/Template/Pages/acls.ctp b/src/Template/Pages/acls.ctp index b8ccca8..ea8b10a 100755 --- a/src/Template/Pages/acls.ctp +++ b/src/Template/Pages/acls.ctp @@ -7,46 +7,83 @@ use App\Controller\DocumentsController; use App\Controller\UsersController; use App\Controller\ConfigurationsController; use App\Controller\FournisseursController; +use App\Controller\PagesController; +use App\Controller\SurCategoriesController; +use App\Controller\FichemetrologiquesController; +use App\Controller\FormulesController; +use App\Controller\QrCodesController; -function displayAuthorizationsForController($c) { +//$controllers = ['Materiels']; +//$controllers = ['Materiels', 'Suivis']; +$controllers = [ + new MaterielsController(), + new SuivisController(), + new EmpruntsController(), + new DocumentsController(), + new PagesController(), + new FournisseursController(), + new SurCategoriesController(), + new ConfigurationsController(), + new UsersController(), + new FichemetrologiquesController(), + new FormulesController(), + new QrCodesController(), + // TODO: + //new UsersController(), + // ... +]; + + +function displayAuthorizationsForController($c) { ?> + Autorisations pour le contrôleur des name?> :

+ + + - - - - - - - - - + + + + + + + + + + + + getAuthorizations(); foreach (array_keys($authorizations) as $action) { ?> - + - + name == 'Emprunts') debug("$condition_status $condition_belonging"); $condition_belonging = $condition_belonging===0 ? 'N' : 'Y'; + $color2 = $condition_belonging==='N' ? 'green' : 'red'; ?> - - + + +
GÉNÉRAL
(règles par défaut)
Utilisateur
(profil)
Responsable
(profil)
Administratif
(profil Gestionnaire)
Super Administrateur
(profil)
ACTIONCondition d'accès
(Statut & Appartenance
du matériel)
CONDITIONS D'ACCÈS
(Statut et Appartenance du matériel)
ACTIONGÉNÉRAL
(règles par défaut)
Utilisateur
(profil)
Responsable
(profil)
Administratif
(profil Gestionnaire)
Super Administrateur
(profil)
- - +

@@ -118,6 +167,11 @@ $controllers = [ --> AUTORISATIONS DES UTILISATEURS (droits en fonction des profils)

+ +

+ Les tableaux ci-dessous sont générés dynamiquement en fonction des autorisations actuelles. + Ils sont donc totalement à jour et reflètent la réalité de l'expérience sur le site. +