Commit e0602edeae275ba0b0d1a6fa612001baff5862e1
1 parent
c57cc436
Exists in
master
and in
1 other branch
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
Showing
11 changed files
with
225 additions
and
26 deletions
Show diff stats
README.md
@@ -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 !!!) |
@@ -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 - |
@@ -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 == 'Super Administrateur') : | @@ -13,7 +13,6 @@ if ($role == 'Super Administrateur') : | ||
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 == 'Super Administrateur') : | @@ -128,8 +127,18 @@ if ($role == 'Super Administrateur') : | ||
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', |