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 @@
  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 +
... ...
README.md
... ... @@ -45,12 +45,14 @@ Logiciel testé et validé sur les configurations suivantes :
45 45 VERSION ACTUELLE
46 46  
47 47 Date: 03/07/2020
48   -Version: 3.7.9.55 (en cours)
  48 +Version: 3.7.9.55
49 49 Author: EP
50 50 Commentaire:
51 51 - Fichier LICENSE (AGPL)
52 52 - Conditions d'utilisation à accepter lors de l'installation
53 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 57 - Amélioration page /pages/acls
56 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 @@
  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 @@
  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 6 \ No newline at end of file
... ...
src/Controller/AppController.php
... ... @@ -71,8 +71,9 @@ class AppController extends Controller
71 71 // Permet à un test de forcer (si true) le re-chargement d'une entité (car modifiée en BD)
72 72 protected static $RELOAD = FALSE;
73 73  
  74 + // (EP 202007) passé dans la table configuration => "mode_nolimit"
74 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 77 //protected $SUPERADMIN_CAN_DO_EVERYTHING = true; // (dev only) no limit, peut TOUT faire (attention, pas en prod svp !!!)
77 78  
78 79 protected $confLabinvent = null;
... ... @@ -148,6 +149,7 @@ class AppController extends Controller
148 149 * ...
149 150 */
150 151  
  152 + 'alias' => '',
151 153 'default' => 0,
152 154 'user' => 'default',
153 155 'resp' => 'default',
... ... @@ -179,6 +181,7 @@ class AppController extends Controller
179 181  
180 182 ]; // default_authorizations
181 183  
  184 + /*
182 185 const default_authorizations_adminonly = [
183 186 'default' => 0,
184 187 'user' => -1,
... ... @@ -187,6 +190,7 @@ class AppController extends Controller
187 190 'adminp' => 'default',
188 191 'super' => 'default'
189 192 ];
  193 + */
190 194  
191 195 /*
192 196 * Tableau des autorisations pour les actions du controleur
... ... @@ -195,10 +199,11 @@ class AppController extends Controller
195 199 *
196 200 * On l'initialise déjà avec les actions autorisées par défaut
197 201 * On le complètera ensuite pour les autres actions
198   - */
199 202 //protected $is_authorized_action = [];
200 203 // Pour tous les controleurs
201   - protected $is_authorized_action = [
  204 + */
  205 + protected $is_authorized_action = [];
  206 + /*
202 207 // autorisé pour tous :
203 208 'index' => self::default_authorizations,
204 209 'view' => self::default_authorizations,
... ... @@ -209,8 +214,8 @@ class AppController extends Controller
209 214 'delete' => self::default_authorizations_adminonly,
210 215 // Uniquement pour le controleur de pages PagesController (1 seule action autorisée : display)
211 216 //'display' => self::default_authorizations,
212   -
213 217 ];
  218 + */
214 219  
215 220  
216 221  
... ... @@ -366,8 +371,19 @@ class AppController extends Controller
366 371 //$roles_short = ['default', 'user', 'resp', 'admin', 'adminp', 'super'];
367 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 382 // initialisation du tableau pour cette action pour le controleur spécifique en cours
370 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 387 // (raccourci) Reference vers le tableau
372 388 $action_rules = &$this->is_authorized_action[$action];
373 389  
... ... @@ -515,6 +531,7 @@ class AppController extends Controller
515 531  
516 532 // WRAPPER sur tableau des autorisations is_authorized_action[]
517 533 public function getAccessConditionForActionAndRole($action, $role) {
  534 + //debug($this->is_authorized_action[$action]);
518 535 // Si pas de règle définie pour l'action => accès interdit
519 536 if (!isset($this->is_authorized_action[$action][$role])) return -1;
520 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 570 $role_long = $this->getUserRole($user);
554 571 $this->d("*************************** CONTROLEUR ".$this->name.", ACTION $action, ROLE $role_long, id=$id, related_matos_id=$related_matos_id");
555 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 576 //if ($action=='statusTobearchived'); exit;
559 577 //$m = ($m_id) ? $this->getCurrentMateriel($m_id) : null;
... ... @@ -587,6 +605,7 @@ class AppController extends Controller
587 605 //debug("role is $role");
588 606 //$access_condition = $this->is_authorized_action[$action][$role];
589 607 $access_condition = $this->getAccessConditionForActionAndRole($action,$role);
  608 + $this->d("0) Condition (complète) (NOT desaliased) :"); $this->d($access_condition);
590 609 //debug($this->is_authorized_action);
591 610 //debug($this->is_authorized_action[$action]);
592 611 //debug("access_condition"); debug($access_condition);
... ... @@ -642,6 +661,7 @@ class AppController extends Controller
642 661 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $m);
643 662 //$condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $m);
644 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 665 $condition_on_status_result = $this->eval_condition_on_status($condition_on_status, $id, $action, $related_matos_id, $m);
646 666 }
647 667 $this->d("$condition_on_status evalué à "); $this->d2($condition_on_status_result);
... ... @@ -1561,6 +1581,9 @@ class AppController extends Controller
1561 1581 if (is_null($this->confLabinvent)) throw new \Exception("EXCEPTION: La table 'configurations' de la base de données est vide");
1562 1582  
1563 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 1587 $SPECIFIC_METHOD_EXISTS = false;
1565 1588 if ($this->confLabinvent->labNameShort) {
1566 1589 $labshortname = $this->confLabinvent->labNameShort;
... ... @@ -1583,6 +1606,52 @@ class AppController extends Controller
1583 1606 // Méthode à spécialiser dans chaque controleur
1584 1607 // Sinon, par défaut c'est celle-ci qui est utilisée et elle ne fait rien !
1585 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 1656 protected function getCurrentUserName() {
1588 1657 //debug($this->LdapAuth->user('id')); exit;
... ...
src/Controller/ConfigurationsController.php
... ... @@ -31,7 +31,10 @@ class ConfigurationsController extends AppController
31 31 foreach (['add', 'index', 'find', 'delete'] as $action) unset($this->is_authorized_action[$action]);
32 32  
33 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 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 280 $this->setAuthorizations();
281 281  
282 282 // 2) Puis on fait nos petites règles locales pour notre labo à nous tout seul
  283 + /*
283 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 286 'user' => ['CREATED',1],
286 287 'resp' => 'default',
287 288 ]);
288 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 291 'user' => ['CREATED',1],
291 292 //'user' => [0,1],
292 293 //'user' => 0,
... ... @@ -296,6 +297,7 @@ class MaterielsController extends AppController {
296 297 //$admin = 'default',
297 298 //$super = 'default' // + champs techniques
298 299 ]);
  300 + */
299 301 }
300 302 // Méthode de définition des autorisations SPÉCIFIQUES au laboratoire CRAL
301 303 protected function setAuthorizations_CRAL() {
... ... @@ -380,11 +382,11 @@ class MaterielsController extends AppController {
380 382  
381 383 // Action 'add' (ajout d'un nouveau matériel) => autorisé pour tous
382 384 //$this->setAuthorizationsForAction('add', 0);
383   - $this->setAuthorizationsForAction('add', 0);
  385 + $this->setAuthorizationsForAction('add (créer)', 0);
384 386 //$this->setAuthorizationsForAction('view', 0);
385 387  
386 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 390 'user' => ['CREATED',1],
389 391 //'resp' => ['CREATED',0],
390 392 //'resp' => 'default',
... ... @@ -412,7 +414,7 @@ class MaterielsController extends AppController {
412 414 */
413 415  
414 416 // Action 'edit' (modif d'un matériel)
415   - $this->setAuthorizationsForAction('edit', ['CREATED',0], [
  417 + $this->setAuthorizationsForAction('edit (modifier)', ['CREATED',0], [
416 418 'user' => ['CREATED',1],
417 419 'resp' => 'user',
418 420 //'resp' => -1,
... ... @@ -423,18 +425,19 @@ class MaterielsController extends AppController {
423 425 ]);
424 426  
425 427 // Action 'delete' (suppression d'un matériel)
426   - $this->setAuthorizationsForAction('delete', ['CREATED',1]);
  428 + $this->setAuthorizationsForAction('delete (supprimer)', ['CREATED',1]);
427 429  
428 430 // Action 'devalidate' ou 'invalidate' (repasser le matériel au statut 'CREATED', c'est à dire le dé-valider ou l'invalider)
429 431 // (VALIDATED ou TBA ou ARCHIVED) => CREATED
430 432 //$this->setAuthorizationsForAction('devalidate',
431   - $this->setAuthorizationsForAction('statusCreated', ['NOT CREATED',0], [
  433 + $this->setAuthorizationsForAction('statusCreated (dévalider)', ['NOT CREATED',0], [
432 434 'user' => -1, // PAS AUTORISÉ
433 435 'resp' => ['NOT CREATED',1]
434 436 ]);
435 437  
436 438 // Action 'updgrade' (avancement du statut d'un matériel)
437 439 // CREATED => VALIDATED => TBA => ARCHIVED
  440 + /*
438 441 $this->setAuthorizationsForAction('upgrade', ['NOT ARCHIVED',0], [ // En fait, l'action fait juste passer au statut "suivant"
439 442 //$default = ['PREVIOUS',0], // le matériel doit avoir le statut "précédent" du statut actuel
440 443 'user' => ['VALIDATED',1], // SEULEMENT l'action "demande d'archivage"
... ... @@ -442,14 +445,15 @@ class MaterielsController extends AppController {
442 445 //'resp' => 'Utilisateur'
443 446 'resp' => 'user'
444 447 ]);
  448 + */
445 449 // Action 'updgrade' (avancement du statut d'un matériel)
446 450 // - Validation d'un materiel (passe à VALIDATED) : CREATED => VALIDATED
447   - $this->setAuthorizationsForAction('statusValidated', ['CREATED',0], [
  451 + $this->setAuthorizationsForAction('statusValidated (valider)', ['CREATED',0], [
448 452 'user' => -1, // interdit
449 453 'resp' => -1 // interdit
450 454 ]);
451 455 // - Demande d'archivage : VALIDATED => TBA
452   - $this->setAuthorizationsForAction('statusTobearchived', ['VALIDATED',0], [
  456 + $this->setAuthorizationsForAction("statusTobearchived (demander l'archivage)", ['VALIDATED',0], [
453 457 //$user = ['default',1],
454 458 'user' => ['VALIDATED',1],
455 459 //$resp = ['default',1]
... ... @@ -457,14 +461,14 @@ class MaterielsController extends AppController {
457 461 'resp' => 'user'
458 462 ]);
459 463 // - Archivage : TBA => ARCHIVED
460   - $this->setAuthorizationsForAction('statusArchived', ['TOBEARCHIVED',0], [
  464 + $this->setAuthorizationsForAction('statusArchived (archiver)', ['TOBEARCHIVED',0], [
461 465 'user' => -1, // interdit
462 466 'resp' => -1 // interdit
463 467 ]);
464 468  
465 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 472 $this->setAuthorizationsForAction('setLabelIsNotPlaced', ['VALIDATED && conf.hasPrinter',0] );
469 473 /*
470 474 $this->setAuthorizationsForAction('setLabelIsPlaced', 0); // autorisé sans condition
... ... @@ -482,13 +486,17 @@ class MaterielsController extends AppController {
482 486 'user' => -1 // interdit
483 487 ]);
484 488 $this->setAuthorizationsForAction('getDateGarantie', 0); // autorisé sans condition
485   -
486 489  
  490 + /*
487 491 // Action 'ficheMateriel'
488 492 $this->setAuthorizationsForAction('createDocFicheMateriel', 0);
489 493 // Action 'ficheMaterielPdf'
490 494 // DOMPDF
491 495 $this->setAuthorizationsForAction('createDocFicheMaterielPdf', 0);
  496 + */
  497 +
  498 + //debug($this->is_authorized_action);exit;
  499 +
492 500  
493 501  
494 502 } // _setAuthorizations()
... ...
src/Controller/PagesController.php
... ... @@ -277,13 +277,19 @@ class PagesController extends AppController
277 277 //debug($level);
278 278 $this->set(compact('level', 'info_levels', 'error_levels'));
279 279 }
280   -
  280 +
281 281 if ($this->page=='acls') {
282 282 $lab_name = $this->confLabinvent->labNameShort;
283 283 if (!$lab_name) $lab_name = 'NOM_DU_LABO';
284 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 294 //debug(implode('/', $path));
289 295 //debug(implode('/', array($page,$subpage)));
... ...
src/Template/Pages/acls.ctp
... ... @@ -98,14 +98,19 @@ function displayAuthorizationsForController($c, $lab_name) {
98 98 ?>
99 99 <!-- Autorisations pour chaque action ($action) -->
100 100 <tr>
101   -
102   - <th class="action" scope="row"><?=$action?></th>
  101 +
103 102 <?php
104 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 109 foreach (array_keys($authorizationsForCurrentAction) as $role) {
107 110 // Autorisations pour chaque role ($role)
108 111  
  112 + // On zappe l'alias
  113 + if ($role == 'alias') continue;
109 114 // On zappe le role "admin plus"
110 115 if ($role == 'adminp') continue;
111 116 $authorizationsForCurrentActionAndRole = $authorizationsForCurrentAction[$role];
... ...
src/Template/Pages/tools.ctp
... ... @@ -13,7 +13,6 @@ if ($role == &#39;Super Administrateur&#39;) :
13 13 echo $this->Html->link('Configuration générale de l\'application', [
14 14 'controller' => 'configurations',
15 15 'action' => 'view',
16   - 1
17 16 ]);
18 17 echo '</td></tr>';
19 18 endif;
... ... @@ -128,8 +127,18 @@ if ($role == &#39;Super Administrateur&#39;) :
128 127 ]);
129 128 }
130 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 144 </table>
... ...
tests/Fixture/ConfigurationsFixture.php
... ... @@ -25,6 +25,7 @@ class ConfigurationsFixture extends TestFixture
25 25 'nom' => ['type' => 'string', 'length' => 45, 'null' => false, 'default' => null, 'comment' => 'obligatoire (et unique)', 'precision' => null, 'fixed' => null],
26 26 'mode_install' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
27 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 29 'ldap_used' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
29 30 'ldap_host' => ['type' => 'text', 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null],
30 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 86 'nom' => 'Lorem ipsum dolor sit amet',
86 87 'mode_install' => 0,
87 88 'mode_debug' => 0,
  89 + 'mode_nolimit' => 0,
88 90  
89 91 'ldap_used' => 0,
90 92 'ldap_host' => 'Lorem ipsum dolor sit amet',
... ...