Commit 6b4e94563179a5697db720a79909e315cfed7a15
1 parent
62d999ae
Exists in
master
and in
1 other branch
Ajout règles validation pour responsabilités attribuées à un User
v4.103.22-3.7.9
Showing
6 changed files
with
108 additions
and
20 deletions
Show diff stats
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 | ... | ... |