Commit 6b4e94563179a5697db720a79909e315cfed7a15

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

Ajout règles validation pour responsabilités attribuées à un User

v4.103.22-3.7.9
CHANGES.txt
... ... @@ -119,6 +119,10 @@ Outre ces changements, voici d'autres changements importants :
119 119  
120 120  
121 121 -------
  122 +01/10/2020 v4.103.22-3.7.9 (EP)
  123 + - (i) Ajout règles validation pour responsabilités attribuées à un User
  124 +
  125 +-------
122 126 30/09/2020 v4.103.21-3.7.9 (EP)
123 127 - (b) bugfix TESTS
124 128 - (b) bugfix "double responsabilité par défaut" => ajout des champs "est responsable du groupe métier/thématique" pour éviter ça
... ...
README.md
... ... @@ -42,8 +42,8 @@ Logiciel testé et validé sur les configurations suivantes :
42 42  
43 43 --------------------------------------------------------------------------------------------
44 44  
45   -Date: 30/09/2020
46   -Version: 4.103.21-3.7.9
  45 +Date: 01/10/2020
  46 +Version: 4.103.22-3.7.9
47 47  
48 48  
49 49 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
... ...
src/Controller/UsersController.php
... ... @@ -406,6 +406,7 @@ class UsersController extends AppController
406 406 'sur_categorie_id' => '1'
407 407 */
408 408 $user = $this->Users->patchEntity($user, $this->request->getData());
  409 + //debug($user); exit;
409 410 if ($this->Users->save($user)) {
410 411 $this->Flash->success(__("L'utilisateur a bien été modifié"));
411 412 return $this->redirect([
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -518,6 +518,7 @@ class MaterielsTable extends AppTable
518 518 */
519 519 public function buildRules(RulesChecker $rules) //: RulesChecker
520 520 {
  521 +
521 522 //$configuration = TableRegistry::get('Configurations')->find()
522 523 /*
523 524 $configuration = TableRegistry::getTableLocator()->get('Configurations')->find()
... ... @@ -527,8 +528,8 @@ class MaterielsTable extends AppTable
527 528 */
528 529 //$this->config = TableRegistry::getTableLocator()->get('Configurations')->get(1);
529 530 $this->config = TableRegistry::getTableLocator()->get('Configurations')->find()->first();
530   -
531   - //debug($this->config);
  531 +
  532 + // 1) Définition de nos propres règles de gestion
532 533  
533 534 /*
534 535 * CONTROLE de la cohérence des champs materiel_administratif et materiel_technique
... ... @@ -623,6 +624,9 @@ class MaterielsTable extends AppTable
623 624 */
624 625 };
625 626  
  627 +
  628 + // 2) Activation des règles de gestion
  629 +
626 630 /*
627 631 $rules->add($checkAtLeastOneChecked, [
628 632 'errorField' => 'materiel_administratif',
... ...
src/Model/Table/UsersTable.php
... ... @@ -80,11 +80,15 @@ class UsersTable extends AppTable
80 80  
81 81 $validator->allowEmpty('password');
82 82  
  83 + /*
83 84 $configuration = TableRegistry::get('Configurations')->find()
84 85 ->where([
85 86 'id =' => 1
86 87 ])
87   - ->first();
  88 + ->first();
  89 + */
  90 + $configuration = TableRegistry::getTableLocator()->get('Configurations')->find()->first();
  91 + //$this->config = TableRegistry::getTableLocator()->get('Configurations')->find()->first();
88 92 if ($configuration->ldap_used) {
89 93 $validator->allowEmpty('email');
90 94 } else {
... ... @@ -114,31 +118,106 @@ class UsersTable extends AppTable
114 118 */
115 119 public function buildRules(RulesChecker $rules)
116 120 {
  121 +
  122 + // 1) Définition de nos propres règles de gestion
  123 +
  124 + // Il doit y avoir cohérence entre le profil "Responsable" et la responsabilité des groupes métier et/ou thématique :
  125 + // - (a) Si une responsabilité est cochée, un groupe doit être choisi
  126 + $checkGroupSelectedIfResponsibilityChecked = function ($entity) {
  127 + foreach (['groupes_metier','groupes_thematique'] as $group_name) {
  128 + $f_group_resp_name = 'is_resp_'.$group_name;
  129 + $f_group_fk_name = $group_name.'_id';
  130 + if ($entity->$f_group_resp_name && !$entity->$f_group_fk_name) return false;
  131 + }
  132 + return true;
  133 + };
  134 + // - (b) Si le profil choisi est "Responsable", la responsabilité d'au moins 1 groupe doit être cochée
  135 + $checkResponsableHasResponsibilities = function ($entity) {
  136 + if ($entity->role == "Responsable")
  137 + return ($entity->is_resp_groupes_metier || $entity->is_resp_groupes_thematique);
  138 + return true;
  139 + };
  140 + // - (c) Si la responsabilité d'au moins 1 groupe est cochée, le profil choisi ne doit pas être "Utilisateur" (mais "Responsable" ou plus)
  141 + $checkResponsibilitiesNotGivenToUtilisateur = function ($entity) {
  142 + if ($entity->is_resp_groupes_metier || $entity->is_resp_groupes_thematique)
  143 + return ($entity->role != "Utilisateur");
  144 + return true;
  145 + };
  146 +
  147 +
  148 + // 2) Activation des règles de gestion
  149 +
117 150 $rules->add($rules->isUnique([
118 151 'username'
119 152 ]));
120 153 // $rules->add($rules->isUnique(['email']));
121 154  
122 155 $rules->add($rules->existsIn([
123   - 'groupes_metier_id'
124   - ], 'GroupesMetiers'));
  156 + 'sur_categorie_id'
  157 + ], 'SurCategories'));
125 158  
126   - $rules->add($rules->existsIn(
127   - ['groupes_thematique_id'],
128   - 'GroupesThematiques'
  159 +
  160 + /*
  161 + * Règles sur la responsabilité des groupes métier ou/et thématique
  162 + *
  163 + */
  164 +
  165 + // a) Les groupes métier et thématique doivent exister dans la BD
  166 + $rules->add(
  167 + $rules->existsIn(['groupes_metier_id'], 'GroupesMetiers')
  168 + );
  169 +
  170 + $rules->add(
  171 + $rules->existsIn(['groupes_thematique_id'], 'GroupesThematiques')
129 172 /*
  173 + [
  174 + 'allowNullableNulls' => true,
  175 + 'allowMultipleNulls' => false
  176 + ]
  177 + */
  178 + );
  179 +
  180 + // b) Cohérence de la responsabilité
  181 + /* Définition d'une closure directe, mais pb on peut pas la réutiliser
  182 + $rules->add(
  183 + function ($entity, $options) {
  184 + foreach (['groupes_metier','groupes_thematique'] as $group_name) {
  185 + $f_group_resp_name = 'is_resp_'.$group_name;
  186 + $f_group_fk_name = $group_name.'_id';
  187 + if ($entity->$f_group_resp_name && !$entity->$f_group_fk_name) return false;
  188 + }
  189 + return true;
  190 + },
  191 + 'checkGroupSelectedIfResponsibilityChecked',
130 192 [
131   - 'allowNullableNulls' => true,
132   - 'allowMultipleNulls' => false
  193 + 'errorField' => 'is_resp_groupes_thematique',
  194 + 'message' => 'Si une responsabilité est cochée, un groupe doit être choisi pour cette responsabilité'
133 195 ]
134   - */
135   - ));
136   -
137   - $rules->add($rules->existsIn([
138   - 'sur_categorie_id'
139   - ], 'SurCategories'));
  196 + );
  197 + */
  198 + $rules->add($checkGroupSelectedIfResponsibilityChecked, [
  199 + 'errorField' => 'is_resp_groupes_thematique',
  200 + 'message' => "Si une responsabilité est cochée, un groupe doit être choisi pour cette responsabilité"
  201 + ]);
  202 + $rules->add($checkGroupSelectedIfResponsibilityChecked, [
  203 + 'errorField' => 'is_resp_groupes_metier',
  204 + 'message' => "Si une responsabilité est cochée, un groupe doit être choisi pour cette responsabilité"
  205 + ]);
  206 + $rules->add($checkResponsableHasResponsibilities, [
  207 + 'errorField' => 'role',
  208 + 'message' => "Si le rôle est Responsable, il faut cocher au moins une responsabilité"
  209 + ]);
  210 + $rules->add($checkResponsibilitiesNotGivenToUtilisateur, [
  211 + 'errorField' => 'role',
  212 + 'message' => "Si la responsabilité d'au moins 1 groupe est cochée, le rôle ne doit pas être 'Utilisateur' (mais au moins 'Responsable')"
  213 + ]);
  214 +
  215 + //debug($rules);exit;
  216 +
140 217 return $rules;
141   - }
  218 +
  219 + } // buildRules()
  220 +
142 221  
143 222 function beforeSave($event, $entity, $options)
144 223 {
... ...
src/Template/Pages/tools.ctp
... ... @@ -100,7 +100,7 @@ if ($role == 'Super Administrateur') :
100 100 echo '<tr><td>';
101 101 echo $this->Html->link('Voir les messages de LOG', [
102 102 //'controller' => 'pages',
103   - 'action' => 'logs'
  103 + 'action' => 'logs?level=info'
104 104 ]);
105 105 echo '</td></tr>';
106 106  
... ...