Commit e0602edeae275ba0b0d1a6fa612001baff5862e1

Authored by Etienne Pallier
1 parent c57cc436
Exists in master and in 1 other branch dev

Plusieurs améliorations (3.7.9.55)

- Fichier LICENSE (AGPL)
- Conditions d'utilisation à accepter lors de l'installation
- script ./INSTALLATION
- Mode "nolimit" dans la config ("Superadmin a tous les droits", depuis
menu Tools)
- Ajout d'un "alias" pour décrire chaque action de chaque controleur
PUSH_MODIFS 0 → 100755
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +#!/usr/bin/env bash
  2 +
  3 +# 1) Mise à jour du code source actuel
  4 +./UPDATE
  5 +
  6 +exit
  7 +# 2) Envoi de mes modifs (sur la branche en cours, a priori master)
  8 +git add .
  9 +git commit -m "Ajout de mes modifications"
  10 +git push
  11 +
@@ -45,12 +45,14 @@ Logiciel testé et validé sur les configurations suivantes : @@ -45,12 +45,14 @@ Logiciel testé et validé sur les configurations suivantes :
45 VERSION ACTUELLE 45 VERSION ACTUELLE
46 46
47 Date: 03/07/2020 47 Date: 03/07/2020
48 -Version: 3.7.9.55 (en cours) 48 +Version: 3.7.9.55
49 Author: EP 49 Author: EP
50 Commentaire: 50 Commentaire:
51 - Fichier LICENSE (AGPL) 51 - Fichier LICENSE (AGPL)
52 - Conditions d'utilisation à accepter lors de l'installation 52 - Conditions d'utilisation à accepter lors de l'installation
53 - script ./INSTALLATION 53 - script ./INSTALLATION
  54 + - Mode "nolimit" dans la config ("Superadmin a tous les droits", depuis menu Tools)
  55 + - Ajout d'un "alias" pour décrire chaque action de chaque controleur
54 56
55 - Amélioration page /pages/acls 57 - Amélioration page /pages/acls
56 - Tests génériques automatiques pour (presque) toutes les actions de (presque) tous les controleurs principaux (Materiels, Suivis, Emprunts, Users) mais aussi du controleur "quelconque" SurCategories (pour vérifier que ça marche aussi !!!) 58 - Tests génériques automatiques pour (presque) toutes les actions de (presque) tous les controleurs principaux (Materiels, Suivis, Emprunts, Users) mais aussi du controleur "quelconque" SurCategories (pour vérifier que ça marche aussi !!!)
database/update/db-update-2020-07-06.sh 0 → 100755
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
  1 +#!/bin/bash
  2 +
  3 +#myname=`basename $0 .sh`
  4 +myname=`basename $0`
  5 +myname=${myname%%.*}
  6 +
  7 +# Pour Mac OS recent (>=10.10, Yosemite), la syntaxe du SED est differente
  8 +# Il faut donc exécuter ce script de la manière suivante :
  9 +# ./macos-db-update.sh <ce_script.sh>
  10 +
  11 +
  12 +function abort() {
  13 + echo "******************************************************"
  14 + echo "!!! Script $0 aborté à cause d'une erreur d'exécution !!!"
  15 + echo "******************************************************"
  16 + exit 1
  17 +}
  18 +
  19 +
  20 +if [ ! -f ../../config/app.php ] ; then
  21 +echo "Vous devez executer ce script depuis le dossier database/update/"
  22 +exit 1
  23 +fi
  24 +
  25 +
  26 +# Get login, pass, dbname, and hostname
  27 +username=$(grep "/\*d\*/'username'" ../../config/app.php | cut -d"'" -f4) || abort
  28 +password=$(grep "/\*d\*/'password'" ../../config/app.php | cut -d"'" -f4) || abort
  29 +database=$(grep "/\*d\*/'database'" ../../config/app.php | cut -d"'" -f4) || abort
  30 +host=$(grep "/\*d\*/'host'" ../../config/app.php | cut -d"'" -f4) || abort
  31 +
  32 +
  33 +#cp -p ./script_sql/db-update-2016-07-01-irap.sql ./script_sql/db-update-2016-07-01-irap-build.sql
  34 +cp -p ./script_sql/$myname.sql ./script_sql/$myname-build.sql || abort
  35 +
  36 +# Execute sql update script
  37 +sed -e "s/database/$database/" -i ./script_sql/$myname-build.sql || abort
  38 +mysql --user=$username --password=$password -h $host < ./script_sql/$myname-build.sql || abort
  39 +
  40 +# Delete temporary file and cakephp cache (-f avoids warning if no file)
  41 +rm -f ./script_sql/$myname-build.sql
  42 +sudo rm -f ../../tmp/cache/models/*
  43 +sudo rm -f ../../tmp/cache/persistent/*
  44 +
  45 +# Faire ca aussi si ca suffit pas...
  46 +#sudo chmod -R 777 ../../tmp
  47 +#sudo chmod -R 777 ../../vendor
  48 +#sudo chmod -R 777 ../../webroot
  49 +
  50 +
  51 +# PLUGIN update
  52 +# Installation plugin cakephp-dompdf
  53 +# (on va a la racine du projet)
  54 +#cd ../../
  55 +#php composer.phar require daoandco/cakephp-dompdf
  56 +#bin/cake plugin assets symlink
  57 +#cd -
database/update/script_sql/db-update-2020-07-06.sql 0 → 100755
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +use database;
  2 +
  3 +-- Table config
  4 +-- 06/07/20 : ajout mode "no limit" pour superadmin
  5 +ALTER TABLE `configurations` ADD `mode_nolimit` BOOLEAN NOT NULL DEFAULT FALSE COMMENT 'superadmin a tous les droits' AFTER `mode_debug`;
0 \ No newline at end of file 6 \ No newline at end of file
src/Controller/AppController.php
@@ -71,8 +71,9 @@ class AppController extends Controller @@ -71,8 +71,9 @@ class AppController extends Controller
71 // Permet à un test de forcer (si true) le re-chargement d'une entité (car modifiée en BD) 71 // Permet à un test de forcer (si true) le re-chargement d'une entité (car modifiée en BD)
72 protected static $RELOAD = FALSE; 72 protected static $RELOAD = FALSE;
73 73
  74 + // (EP 202007) passé dans la table configuration => "mode_nolimit"
74 // Il suffit de passer ceci à true pour TOUT autoriser à superadmin 75 // Il suffit de passer ceci à true pour TOUT autoriser à superadmin
75 - protected $SUPERADMIN_CAN_DO_EVERYTHING = false; // (prod) Par défaut (false), il se comporte un peu comme ADMIN 76 + //protected $SUPERADMIN_CAN_DO_EVERYTHING = false; // (prod) Par défaut (false), il se comporte un peu comme ADMIN
76 //protected $SUPERADMIN_CAN_DO_EVERYTHING = true; // (dev only) no limit, peut TOUT faire (attention, pas en prod svp !!!) 77 //protected $SUPERADMIN_CAN_DO_EVERYTHING = true; // (dev only) no limit, peut TOUT faire (attention, pas en prod svp !!!)
77 78
78 protected $confLabinvent = null; 79 protected $confLabinvent = null;
@@ -148,6 +149,7 @@ class AppController extends Controller @@ -148,6 +149,7 @@ class AppController extends Controller
148 * ... 149 * ...
149 */ 150 */
150 151
  152 + 'alias' => '',
151 'default' => 0, 153 'default' => 0,
152 'user' => 'default', 154 'user' => 'default',
153 'resp' => 'default', 155 'resp' => 'default',
@@ -179,6 +181,7 @@ class AppController extends Controller @@ -179,6 +181,7 @@ class AppController extends Controller
179 181
180 ]; // default_authorizations 182 ]; // default_authorizations
181 183
  184 + /*
182 const default_authorizations_adminonly = [ 185 const default_authorizations_adminonly = [
183 'default' => 0, 186 'default' => 0,
184 'user' => -1, 187 'user' => -1,
@@ -187,6 +190,7 @@ class AppController extends Controller @@ -187,6 +190,7 @@ class AppController extends Controller
187 'adminp' => 'default', 190 'adminp' => 'default',
188 'super' => 'default' 191 'super' => 'default'
189 ]; 192 ];
  193 + */
190 194
191 /* 195 /*
192 * Tableau des autorisations pour les actions du controleur 196 * Tableau des autorisations pour les actions du controleur
@@ -195,10 +199,11 @@ class AppController extends Controller @@ -195,10 +199,11 @@ class AppController extends Controller
195 * 199 *
196 * On l'initialise déjà avec les actions autorisées par défaut 200 * On l'initialise déjà avec les actions autorisées par défaut
197 * On le complètera ensuite pour les autres actions 201 * On le complètera ensuite pour les autres actions
198 - */  
199 //protected $is_authorized_action = []; 202 //protected $is_authorized_action = [];
200 // Pour tous les controleurs 203 // Pour tous les controleurs
201 - protected $is_authorized_action = [ 204 + */
  205 + protected $is_authorized_action = [];
  206 + /*
202 // autorisé pour tous : 207 // autorisé pour tous :
203 'index' => self::default_authorizations, 208 'index' => self::default_authorizations,
204 'view' => self::default_authorizations, 209 'view' => self::default_authorizations,
@@ -209,8 +214,8 @@ class AppController extends Controller @@ -209,8 +214,8 @@ class AppController extends Controller
209 'delete' => self::default_authorizations_adminonly, 214 'delete' => self::default_authorizations_adminonly,
210 // Uniquement pour le controleur de pages PagesController (1 seule action autorisée : display) 215 // Uniquement pour le controleur de pages PagesController (1 seule action autorisée : display)
211 //'display' => self::default_authorizations, 216 //'display' => self::default_authorizations,
212 -  
213 ]; 217 ];
  218 + */
214 219
215 220
216 221
@@ -366,8 +371,19 @@ class AppController extends Controller @@ -366,8 +371,19 @@ class AppController extends Controller
366 //$roles_short = ['default', 'user', 'resp', 'admin', 'adminp', 'super']; 371 //$roles_short = ['default', 'user', 'resp', 'admin', 'adminp', 'super'];
367 $roles_short = ['user', 'resp', 'admin', 'adminp', 'super']; 372 $roles_short = ['user', 'resp', 'admin', 'adminp', 'super'];
368 373
  374 + $alias = '';
  375 + $action_and_alias = explode('(',$action);
  376 + if (count($action_and_alias)==2) {
  377 + $action = trim($action_and_alias[0]);
  378 + $alias = substr($action_and_alias[1],0,-1);
  379 + }
  380 + //debug("action=$action, alias=$alias");
  381 +
369 // initialisation du tableau pour cette action pour le controleur spécifique en cours 382 // initialisation du tableau pour cette action pour le controleur spécifique en cours
370 $this->is_authorized_action[$action] = self::default_authorizations; 383 $this->is_authorized_action[$action] = self::default_authorizations;
  384 + // Ajout de l'alias dans le tableau des autorisations pour cette action
  385 + $this->is_authorized_action[$action]['alias'] = $alias;
  386 +
371 // (raccourci) Reference vers le tableau 387 // (raccourci) Reference vers le tableau
372 $action_rules = &$this->is_authorized_action[$action]; 388 $action_rules = &$this->is_authorized_action[$action];
373 389
@@ -515,6 +531,7 @@ class AppController extends Controller @@ -515,6 +531,7 @@ class AppController extends Controller
515 531
516 // WRAPPER sur tableau des autorisations is_authorized_action[] 532 // WRAPPER sur tableau des autorisations is_authorized_action[]
517 public function getAccessConditionForActionAndRole($action, $role) { 533 public function getAccessConditionForActionAndRole($action, $role) {
  534 + //debug($this->is_authorized_action[$action]);
518 // Si pas de règle définie pour l'action => accès interdit 535 // Si pas de règle définie pour l'action => accès interdit
519 if (!isset($this->is_authorized_action[$action][$role])) return -1; 536 if (!isset($this->is_authorized_action[$action][$role])) return -1;
520 //throw new \ErrorException("L'action '$action' n'a pas de condition d'accès définie dans le controleur $this->name (role '$role') !!"); 537 //throw new \ErrorException("L'action '$action' n'a pas de condition d'accès définie dans le controleur $this->name (role '$role') !!");
@@ -553,7 +570,8 @@ class AppController extends Controller @@ -553,7 +570,8 @@ class AppController extends Controller
553 $role_long = $this->getUserRole($user); 570 $role_long = $this->getUserRole($user);
554 $this->d("*************************** CONTROLEUR ".$this->name.", ACTION $action, ROLE $role_long, id=$id, related_matos_id=$related_matos_id"); 571 $this->d("*************************** CONTROLEUR ".$this->name.", ACTION $action, ROLE $role_long, id=$id, related_matos_id=$related_matos_id");
555 //$this->d("********* USER :"); $this->d2($user); 572 //$this->d("********* USER :"); $this->d2($user);
556 - if ($this->SUPERADMIN_CAN_DO_EVERYTHING) return TRUE; 573 + //if ($this->SUPERADMIN_CAN_DO_EVERYTHING) return TRUE;
  574 + if ($this->confLabinvent->mode_nolimit) return TRUE;
557 575
558 //if ($action=='statusTobearchived'); exit; 576 //if ($action=='statusTobearchived'); exit;
559 //$m = ($m_id) ? $this->getCurrentMateriel($m_id) : null; 577 //$m = ($m_id) ? $this->getCurrentMateriel($m_id) : null;
@@ -587,6 +605,7 @@ class AppController extends Controller @@ -587,6 +605,7 @@ class AppController extends Controller
587 //debug("role is $role"); 605 //debug("role is $role");
588 //$access_condition = $this->is_authorized_action[$action][$role]; 606 //$access_condition = $this->is_authorized_action[$action][$role];
589 $access_condition = $this->getAccessConditionForActionAndRole($action,$role); 607 $access_condition = $this->getAccessConditionForActionAndRole($action,$role);
  608 + $this->d("0) Condition (complète) (NOT desaliased) :"); $this->d($access_condition);
590 //debug($this->is_authorized_action); 609 //debug($this->is_authorized_action);
591 //debug($this->is_authorized_action[$action]); 610 //debug($this->is_authorized_action[$action]);
592 //debug("access_condition"); debug($access_condition); 611 //debug("access_condition"); debug($access_condition);
@@ -642,6 +661,7 @@ class AppController extends Controller @@ -642,6 +661,7 @@ class AppController extends Controller
642 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $m); 661 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $m);
643 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $m); 662 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $m);
644 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $IS_RELATED_ENTITY_ID, $m); 663 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $IS_RELATED_ENTITY_ID, $m);
  664 + //debug("condition");debug($condition_on_status); exit;
645 $condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $related_matos_id, $m); 665 $condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $related_matos_id, $m);
646 } 666 }
647 $this->d("$condition_on_status evalué à "); $this->d2($condition_on_status_result); 667 $this->d("$condition_on_status evalué à "); $this->d2($condition_on_status_result);
@@ -1561,6 +1581,9 @@ class AppController extends Controller @@ -1561,6 +1581,9 @@ class AppController extends Controller
1561 if (is_null($this->confLabinvent)) throw new \Exception("EXCEPTION: La table 'configurations' de la base de données est vide"); 1581 if (is_null($this->confLabinvent)) throw new \Exception("EXCEPTION: La table 'configurations' de la base de données est vide");
1562 1582
1563 // Initialisation des autorisations pour les actions du controleur 1583 // Initialisation des autorisations pour les actions du controleur
  1584 + // 1) Initialisation des autorisations par défaut du parent (AppController)
  1585 + $this->setDefaultAuthorizations();
  1586 + // 2) Ajout des autorisations spécifiques par le controleur courant
1564 $SPECIFIC_METHOD_EXISTS = false; 1587 $SPECIFIC_METHOD_EXISTS = false;
1565 if ($this->confLabinvent->labNameShort) { 1588 if ($this->confLabinvent->labNameShort) {
1566 $labshortname = $this->confLabinvent->labNameShort; 1589 $labshortname = $this->confLabinvent->labNameShort;
@@ -1583,6 +1606,52 @@ class AppController extends Controller @@ -1583,6 +1606,52 @@ class AppController extends Controller
1583 // Méthode à spécialiser dans chaque controleur 1606 // Méthode à spécialiser dans chaque controleur
1584 // Sinon, par défaut c'est celle-ci qui est utilisée et elle ne fait rien ! 1607 // Sinon, par défaut c'est celle-ci qui est utilisée et elle ne fait rien !
1585 protected function setAuthorizations() {} 1608 protected function setAuthorizations() {}
  1609 +
  1610 + // Actions autorisées par défaut pour TOUS les controleurs
  1611 + protected function setDefaultAuthorizations() {
  1612 +
  1613 + // autorisé pour tous
  1614 + $this->setAuthorizationsForAction('index (liste générale)', 0);
  1615 + $this->setAuthorizationsForAction('view (vue détaillée)', 0);
  1616 + $this->setAuthorizationsForAction('find (rechercher)', 0);
  1617 + /*
  1618 + $this->setAuthorizationsForAction('index', 0);
  1619 + $this->setAuthorizationsForAction('view', 0);
  1620 + $this->setAuthorizationsForAction('find', 0);
  1621 + */
  1622 +
  1623 + // admin(+) only :
  1624 + $this->setAuthorizationsForAction('add(créer)', 0, [
  1625 + //$this->setAuthorizationsForAction('add', 0, [
  1626 + 'user' => -1,
  1627 + 'resp' => -1,
  1628 + ]);
  1629 + $this->setAuthorizationsForAction('edit (modifier)', 0, [
  1630 + //$this->setAuthorizationsForAction('edit', 0, [
  1631 + 'user' => -1,
  1632 + 'resp' => -1,
  1633 + ]);
  1634 + $this->setAuthorizationsForAction('delete (supprimer)', 0, [
  1635 + //$this->setAuthorizationsForAction('delete', 0, [
  1636 + 'user' => -1,
  1637 + 'resp' => -1,
  1638 + ]);
  1639 + //debug($this->is_authorized_action);exit;
  1640 +
  1641 + }
  1642 +
  1643 +
  1644 +
  1645 +
  1646 +
  1647 +
  1648 +
  1649 +
  1650 +
  1651 +
  1652 +
  1653 +
  1654 +
1586 1655
1587 protected function getCurrentUserName() { 1656 protected function getCurrentUserName() {
1588 //debug($this->LdapAuth->user('id')); exit; 1657 //debug($this->LdapAuth->user('id')); exit;
src/Controller/ConfigurationsController.php
@@ -31,7 +31,10 @@ class ConfigurationsController extends AppController @@ -31,7 +31,10 @@ class ConfigurationsController extends AppController
31 foreach (['add', 'index', 'find', 'delete'] as $action) unset($this->is_authorized_action[$action]); 31 foreach (['add', 'index', 'find', 'delete'] as $action) unset($this->is_authorized_action[$action]);
32 32
33 // Actions autorisées seulement à superadmin 33 // Actions autorisées seulement à superadmin
34 - foreach (['view', 'edit', 'debugOn', 'debugOff'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]); 34 + foreach (['view', 'edit', 'nolimit', 'debugOn', 'debugOff'] as $action) $this->setAuthorizationsForAction($action, -1, ['super'=>0]);
  35 +
  36 + // Actions autorisées à tous
  37 + foreach (['installOn', 'installOff'] as $action) $this->setAuthorizationsForAction($action, 0);
35 38
36 } 39 }
37 40
@@ -229,4 +232,26 @@ class ConfigurationsController extends AppController @@ -229,4 +232,26 @@ class ConfigurationsController extends AppController
229 'action' => 'tools' 232 'action' => 'tools'
230 ]); 233 ]);
231 } 234 }
  235 +
  236 + /**
  237 + * Activation/Désactivation du mode no limit (SA a tous les droits)
  238 + * Action à "bascule" ON/OFF (Si ON => OFF, si OFF => ON)
  239 + *
  240 + */
  241 + public function nolimit()
  242 + {
  243 + //$this->SUPERADMIN_CAN_DO_EVERYTHING = ! $this->SUPERADMIN_CAN_DO_EVERYTHING;
  244 + $config = $this->Configurations->get(1);
  245 + $config->mode_nolimit = ! $config->mode_nolimit;
  246 + $verb = $config->mode_nolimit ? "activé":"désactivé";
  247 + if ($this->Configurations->save($config)) {
  248 + $this->Flash->success(__("Le mode 'SuperAdmin a tous les droits' est $verb"));
  249 + }
  250 + return $this->redirect([
  251 + 'controller' => 'pages',
  252 + 'action' => 'tools'
  253 + ]);
  254 + }
  255 +
  256 +
232 } 257 }
src/Controller/MaterielsController.php
@@ -280,13 +280,14 @@ class MaterielsController extends AppController { @@ -280,13 +280,14 @@ class MaterielsController extends AppController {
280 $this->setAuthorizations(); 280 $this->setAuthorizations();
281 281
282 // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul 282 // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul
  283 + /*
283 // - Adaptation de la règle pour "ajout par copie" 284 // - Adaptation de la règle pour "ajout par copie"
284 - $this->setAuthorizationsForAction('add_by_copy', ['CREATED',0], [ 285 + $this->setAuthorizationsForAction('add_by_copy', '', ['CREATED',0], [
285 'user' => ['CREATED',1], 286 'user' => ['CREATED',1],
286 'resp' => 'default', 287 'resp' => 'default',
287 ]); 288 ]);
288 // - Adaptation de la règle pour "edit" (modif d'un matériel) 289 // - Adaptation de la règle pour "edit" (modif d'un matériel)
289 - $this->setAuthorizationsForAction('edit', ['CREATED',0], [ 290 + $this->setAuthorizationsForAction('edit', '', ['CREATED',0], [
290 'user' => ['CREATED',1], 291 'user' => ['CREATED',1],
291 //'user' => [0,1], 292 //'user' => [0,1],
292 //'user' => 0, 293 //'user' => 0,
@@ -296,6 +297,7 @@ class MaterielsController extends AppController { @@ -296,6 +297,7 @@ class MaterielsController extends AppController {
296 //$admin = 'default', 297 //$admin = 'default',
297 //$super = 'default' // + champs techniques 298 //$super = 'default' // + champs techniques
298 ]); 299 ]);
  300 + */
299 } 301 }
300 // Méthode de définition des autorisations SPÉCIFIQUES au laboratoire CRAL 302 // Méthode de définition des autorisations SPÉCIFIQUES au laboratoire CRAL
301 protected function setAuthorizations_CRAL() { 303 protected function setAuthorizations_CRAL() {
@@ -380,11 +382,11 @@ class MaterielsController extends AppController { @@ -380,11 +382,11 @@ class MaterielsController extends AppController {
380 382
381 // Action 'add' (ajout d'un nouveau matériel) => autorisé pour tous 383 // Action 'add' (ajout d'un nouveau matériel) => autorisé pour tous
382 //$this->setAuthorizationsForAction('add', 0); 384 //$this->setAuthorizationsForAction('add', 0);
383 - $this->setAuthorizationsForAction('add', 0); 385 + $this->setAuthorizationsForAction('add (créer)', 0);
384 //$this->setAuthorizationsForAction('view', 0); 386 //$this->setAuthorizationsForAction('view', 0);
385 387
386 // Action 'add' (ajout d'un nouveau matériel par copie d'un autre) 388 // Action 'add' (ajout d'un nouveau matériel par copie d'un autre)
387 - $this->setAuthorizationsForAction('add_by_copy', ['CREATED',0], [ 389 + $this->setAuthorizationsForAction('add_by_copy (ajout par copie)', ['CREATED',0], [
388 'user' => ['CREATED',1], 390 'user' => ['CREATED',1],
389 //'resp' => ['CREATED',0], 391 //'resp' => ['CREATED',0],
390 //'resp' => 'default', 392 //'resp' => 'default',
@@ -412,7 +414,7 @@ class MaterielsController extends AppController { @@ -412,7 +414,7 @@ class MaterielsController extends AppController {
412 */ 414 */
413 415
414 // Action 'edit' (modif d'un matériel) 416 // Action 'edit' (modif d'un matériel)
415 - $this->setAuthorizationsForAction('edit', ['CREATED',0], [ 417 + $this->setAuthorizationsForAction('edit (modifier)', ['CREATED',0], [
416 'user' => ['CREATED',1], 418 'user' => ['CREATED',1],
417 'resp' => 'user', 419 'resp' => 'user',
418 //'resp' => -1, 420 //'resp' => -1,
@@ -423,18 +425,19 @@ class MaterielsController extends AppController { @@ -423,18 +425,19 @@ class MaterielsController extends AppController {
423 ]); 425 ]);
424 426
425 // Action 'delete' (suppression d'un matériel) 427 // Action 'delete' (suppression d'un matériel)
426 - $this->setAuthorizationsForAction('delete', ['CREATED',1]); 428 + $this->setAuthorizationsForAction('delete (supprimer)', ['CREATED',1]);
427 429
428 // Action 'devalidate' ou 'invalidate' (repasser le matériel au statut 'CREATED', c'est à dire le dé-valider ou l'invalider) 430 // Action 'devalidate' ou 'invalidate' (repasser le matériel au statut 'CREATED', c'est à dire le dé-valider ou l'invalider)
429 // (VALIDATED ou TBA ou ARCHIVED) => CREATED 431 // (VALIDATED ou TBA ou ARCHIVED) => CREATED
430 //$this->setAuthorizationsForAction('devalidate', 432 //$this->setAuthorizationsForAction('devalidate',
431 - $this->setAuthorizationsForAction('statusCreated', ['NOT CREATED',0], [ 433 + $this->setAuthorizationsForAction('statusCreated (dévalider)', ['NOT CREATED',0], [
432 'user' => -1, // PAS AUTORISÉ 434 'user' => -1, // PAS AUTORISÉ
433 'resp' => ['NOT CREATED',1] 435 'resp' => ['NOT CREATED',1]
434 ]); 436 ]);
435 437
436 // Action 'updgrade' (avancement du statut d'un matériel) 438 // Action 'updgrade' (avancement du statut d'un matériel)
437 // CREATED => VALIDATED => TBA => ARCHIVED 439 // CREATED => VALIDATED => TBA => ARCHIVED
  440 + /*
438 $this->setAuthorizationsForAction('upgrade', ['NOT ARCHIVED',0], [ // En fait, l'action fait juste passer au statut "suivant" 441 $this->setAuthorizationsForAction('upgrade', ['NOT ARCHIVED',0], [ // En fait, l'action fait juste passer au statut "suivant"
439 //$default = ['PREVIOUS',0], // le matériel doit avoir le statut "précédent" du statut actuel 442 //$default = ['PREVIOUS',0], // le matériel doit avoir le statut "précédent" du statut actuel
440 'user' => ['VALIDATED',1], // SEULEMENT l'action "demande d'archivage" 443 'user' => ['VALIDATED',1], // SEULEMENT l'action "demande d'archivage"
@@ -442,14 +445,15 @@ class MaterielsController extends AppController { @@ -442,14 +445,15 @@ class MaterielsController extends AppController {
442 //'resp' => 'Utilisateur' 445 //'resp' => 'Utilisateur'
443 'resp' => 'user' 446 'resp' => 'user'
444 ]); 447 ]);
  448 + */
445 // Action 'updgrade' (avancement du statut d'un matériel) 449 // Action 'updgrade' (avancement du statut d'un matériel)
446 // - Validation d'un materiel (passe à VALIDATED) : CREATED => VALIDATED 450 // - Validation d'un materiel (passe à VALIDATED) : CREATED => VALIDATED
447 - $this->setAuthorizationsForAction('statusValidated', ['CREATED',0], [ 451 + $this->setAuthorizationsForAction('statusValidated (valider)', ['CREATED',0], [
448 'user' => -1, // interdit 452 'user' => -1, // interdit
449 'resp' => -1 // interdit 453 'resp' => -1 // interdit
450 ]); 454 ]);
451 // - Demande d'archivage : VALIDATED => TBA 455 // - Demande d'archivage : VALIDATED => TBA
452 - $this->setAuthorizationsForAction('statusTobearchived', ['VALIDATED',0], [ 456 + $this->setAuthorizationsForAction("statusTobearchived (demander l'archivage)", ['VALIDATED',0], [
453 //$user = ['default',1], 457 //$user = ['default',1],
454 'user' => ['VALIDATED',1], 458 'user' => ['VALIDATED',1],
455 //$resp = ['default',1] 459 //$resp = ['default',1]
@@ -457,14 +461,14 @@ class MaterielsController extends AppController { @@ -457,14 +461,14 @@ class MaterielsController extends AppController {
457 'resp' => 'user' 461 'resp' => 'user'
458 ]); 462 ]);
459 // - Archivage : TBA => ARCHIVED 463 // - Archivage : TBA => ARCHIVED
460 - $this->setAuthorizationsForAction('statusArchived', ['TOBEARCHIVED',0], [ 464 + $this->setAuthorizationsForAction('statusArchived (archiver)', ['TOBEARCHIVED',0], [
461 'user' => -1, // interdit 465 'user' => -1, // interdit
462 'resp' => -1 // interdit 466 'resp' => -1 // interdit
463 ]); 467 ]);
464 468
465 // Action 'printLabelRuban' (impression d'une étiquette) 469 // Action 'printLabelRuban' (impression d'une étiquette)
466 - $this->setAuthorizationsForAction('printLabelRuban', ['VALIDATED && conf.hasPrinter',0] );  
467 - $this->setAuthorizationsForAction('setLabelIsPlaced', ['VALIDATED && conf.hasPrinter',0] ); 470 + $this->setAuthorizationsForAction('printLabelRuban (imprimer étiquette)', ['VALIDATED && conf.hasPrinter',0] );
  471 + $this->setAuthorizationsForAction('setLabelIsPlaced (déclarer étiquette collée)', ['VALIDATED && conf.hasPrinter',0] );
468 $this->setAuthorizationsForAction('setLabelIsNotPlaced', ['VALIDATED && conf.hasPrinter',0] ); 472 $this->setAuthorizationsForAction('setLabelIsNotPlaced', ['VALIDATED && conf.hasPrinter',0] );
469 /* 473 /*
470 $this->setAuthorizationsForAction('setLabelIsPlaced', 0); // autorisé sans condition 474 $this->setAuthorizationsForAction('setLabelIsPlaced', 0); // autorisé sans condition
@@ -482,13 +486,17 @@ class MaterielsController extends AppController { @@ -482,13 +486,17 @@ class MaterielsController extends AppController {
482 'user' => -1 // interdit 486 'user' => -1 // interdit
483 ]); 487 ]);
484 $this->setAuthorizationsForAction('getDateGarantie', 0); // autorisé sans condition 488 $this->setAuthorizationsForAction('getDateGarantie', 0); // autorisé sans condition
485 -  
486 489
  490 + /*
487 // Action 'ficheMateriel' 491 // Action 'ficheMateriel'
488 $this->setAuthorizationsForAction('createDocFicheMateriel', 0); 492 $this->setAuthorizationsForAction('createDocFicheMateriel', 0);
489 // Action 'ficheMaterielPdf' 493 // Action 'ficheMaterielPdf'
490 // DOMPDF 494 // DOMPDF
491 $this->setAuthorizationsForAction('createDocFicheMaterielPdf', 0); 495 $this->setAuthorizationsForAction('createDocFicheMaterielPdf', 0);
  496 + */
  497 +
  498 + //debug($this->is_authorized_action);exit;
  499 +
492 500
493 501
494 } // _setAuthorizations() 502 } // _setAuthorizations()
src/Controller/PagesController.php
@@ -277,13 +277,19 @@ class PagesController extends AppController @@ -277,13 +277,19 @@ class PagesController extends AppController
277 //debug($level); 277 //debug($level);
278 $this->set(compact('level', 'info_levels', 'error_levels')); 278 $this->set(compact('level', 'info_levels', 'error_levels'));
279 } 279 }
280 - 280 +
281 if ($this->page=='acls') { 281 if ($this->page=='acls') {
282 $lab_name = $this->confLabinvent->labNameShort; 282 $lab_name = $this->confLabinvent->labNameShort;
283 if (!$lab_name) $lab_name = 'NOM_DU_LABO'; 283 if (!$lab_name) $lab_name = 'NOM_DU_LABO';
284 $this->set(compact('lab_name')); 284 $this->set(compact('lab_name'));
285 } 285 }
286 286
  287 + if ($this->page=='tools') {
  288 + // Mode 'SA a tous les droits'
  289 + $no_limit_mode = $this->confLabinvent->mode_nolimit;
  290 + $this->set(compact('no_limit_mode'));
  291 + }
  292 +
287 293
288 //debug(implode('/', $path)); 294 //debug(implode('/', $path));
289 //debug(implode('/', array($page,$subpage))); 295 //debug(implode('/', array($page,$subpage)));
src/Template/Pages/acls.ctp
@@ -98,14 +98,19 @@ function displayAuthorizationsForController($c, $lab_name) { @@ -98,14 +98,19 @@ function displayAuthorizationsForController($c, $lab_name) {
98 ?> 98 ?>
99 <!-- Autorisations pour chaque action ($action) --> 99 <!-- Autorisations pour chaque action ($action) -->
100 <tr> 100 <tr>
101 -  
102 - <th class="action" scope="row"><?=$action?></th> 101 +
103 <?php 102 <?php
104 $authorizationsForCurrentAction = $authorizations[$action]; 103 $authorizationsForCurrentAction = $authorizations[$action];
105 - 104 + $alias = $authorizationsForCurrentAction['alias'];
  105 + if ($alias) $action.=" ($alias)";
  106 + ?>
  107 + <th class="action" scope="row"><?=$action?></th>
  108 + <?php
106 foreach (array_keys($authorizationsForCurrentAction) as $role) { 109 foreach (array_keys($authorizationsForCurrentAction) as $role) {
107 // Autorisations pour chaque role ($role) 110 // Autorisations pour chaque role ($role)
108 111
  112 + // On zappe l'alias
  113 + if ($role == 'alias') continue;
109 // On zappe le role "admin plus" 114 // On zappe le role "admin plus"
110 if ($role == 'adminp') continue; 115 if ($role == 'adminp') continue;
111 $authorizationsForCurrentActionAndRole = $authorizationsForCurrentAction[$role]; 116 $authorizationsForCurrentActionAndRole = $authorizationsForCurrentAction[$role];
src/Template/Pages/tools.ctp
@@ -13,7 +13,6 @@ if ($role == &#39;Super Administrateur&#39;) : @@ -13,7 +13,6 @@ if ($role == &#39;Super Administrateur&#39;) :
13 echo $this->Html->link('Configuration générale de l\'application', [ 13 echo $this->Html->link('Configuration générale de l\'application', [
14 'controller' => 'configurations', 14 'controller' => 'configurations',
15 'action' => 'view', 15 'action' => 'view',
16 - 1  
17 ]); 16 ]);
18 echo '</td></tr>'; 17 echo '</td></tr>';
19 endif; 18 endif;
@@ -128,8 +127,18 @@ if ($role == &#39;Super Administrateur&#39;) : @@ -128,8 +127,18 @@ if ($role == &#39;Super Administrateur&#39;) :
128 ]); 127 ]);
129 } 128 }
130 echo '</td></tr>'; 129 echo '</td></tr>';
  130 +
  131 + // SA a tous les droits, non mais...
  132 + echo '<tr><td>';
  133 + $verb = $no_limit_mode ? 'Stopper':'Activer';
  134 + echo $this->Html->link("$verb le mode 'Superadmin a tous les droits' (pour debug only)", [
  135 + //'controller' => 'pages',
  136 + 'controller' => 'configurations',
  137 + 'action' => 'nolimit'
  138 + ]);
  139 + echo '</td></tr>';
131 140
132 -endif; 141 +endif; // SA only
133 142
134 ?> 143 ?>
135 </table> 144 </table>
tests/Fixture/ConfigurationsFixture.php
@@ -25,6 +25,7 @@ class ConfigurationsFixture extends TestFixture @@ -25,6 +25,7 @@ class ConfigurationsFixture extends TestFixture
25 'nom' => ['type' => 'string', 'length' => 45, 'null' => false, 'default' => null, 'comment' => 'obligatoire (et unique)', 'precision' => null, 'fixed' => null], 25 'nom' => ['type' => 'string', 'length' => 45, 'null' => false, 'default' => null, 'comment' => 'obligatoire (et unique)', 'precision' => null, 'fixed' => null],
26 'mode_install' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], 26 'mode_install' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
27 'mode_debug' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], 27 'mode_debug' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
  28 + 'mode_nolimit' => ['type' => 'boolean', 'length' => null, 'null' => false, 'default' => false, 'comment' => '', 'precision' => null],
28 'ldap_used' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], 29 'ldap_used' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
29 'ldap_host' => ['type' => 'text', 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null], 30 'ldap_host' => ['type' => 'text', 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null],
30 'ldap_port' => ['type' => 'string', 'length' => 10, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null], 31 'ldap_port' => ['type' => 'string', 'length' => 10, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null],
@@ -85,6 +86,7 @@ class ConfigurationsFixture extends TestFixture @@ -85,6 +86,7 @@ class ConfigurationsFixture extends TestFixture
85 'nom' => 'Lorem ipsum dolor sit amet', 86 'nom' => 'Lorem ipsum dolor sit amet',
86 'mode_install' => 0, 87 'mode_install' => 0,
87 'mode_debug' => 0, 88 'mode_debug' => 0,
  89 + 'mode_nolimit' => 0,
88 90
89 'ldap_used' => 0, 91 'ldap_used' => 0,
90 'ldap_host' => 'Lorem ipsum dolor sit amet', 92 'ldap_host' => 'Lorem ipsum dolor sit amet',