Commit f084c88bfd824e789572a5cc1acb8fa0b19796f8

Authored by Etienne Pallier
1 parent ba708244

Gros bugfix + simplification ACL (authorizations)

- Gros Bugfix : un utilisateur du ldap sans privilège n'était souvent
pas reconnu comme ‘Utilisateur'

- Dans tous les controleurs, refactorisation, simplification,
harmonisation, rationalisation, suppression des redondances
README-LABINVENT.md
... ... @@ -48,8 +48,10 @@ Logiciel testé et validé sur les configurations suivantes :
48 48 VERSION ACTUELLE
49 49  
50 50 Date: 29/08/2017
51   -Version: 2.7.7
52   - Grosse amelioration des tests (refactorisation, généralisation)
  51 +Version: 2.7.8
  52 + - Bugfix important sur détection du role "Utilisateur" pour les personnes du ldap qui ne sont pas dans la table utilisateurs !!!
  53 + - Creation d'un fake utilisateur pour simuler un utilisateur qui n'est pas dans la table utilisateurs (et tester le cas ci-dessus)
  54 + - Ajout de tests avec cet utilisateur
53 55  
54 56 Version majeure en cours (2.7): https://projects.irap.omp.eu/versions/162
55 57  
... ...
src/Controller/AppController.php
... ... @@ -59,6 +59,19 @@ class AppController extends Controller {
59 59 //debug("role is" .$role);
60 60 return self::PROFILES[$role];
61 61 }
  62 +
  63 + public function getActionPassed() {
  64 + // BETTER:
  65 + //return $this->request->getAttribute('params')['action'];
  66 + return $this->request->getParam('action');
  67 + }
  68 +
  69 + public function getIdPassed() {
  70 + //return (int) $this->request->getAttribute('params')['pass'][0];
  71 + return (int) $this->request->getParam('pass.0');
  72 + }
  73 +
  74 +
62 75  
63 76 /**
64 77 * Initialization hook method.
... ... @@ -81,28 +94,69 @@ class AppController extends Controller {
81 94 $this->confLabinvent = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
82 95 }
83 96  
  97 +
  98 + /**
  99 + * Autorisations fréquentes utilisées par bcp de isAuthorized() de controlleurs
  100 + * Ca évite de répéter 10 fois la meme chose !!!
  101 + */
  102 + public function isAuthorizedCommons() {
  103 + $action = $this->getActionPassed();
  104 + //$role = $this->getUserRole($user);
  105 +
  106 + // Seul Administration (et +) peut ajouter, supprimer ou modifier un organisme
  107 + if( in_array($action,['add','delete','edit'])) {
  108 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  109 + // Les autres n'y ont pas accès
  110 + return false;
  111 + }
  112 +
  113 + // By default
  114 + return parent::isAuthorized($user);
  115 + }
  116 +
84 117 /**
85 118 * @param $user
86 119 * @return boolean
  120 + *
  121 + * isAuthorized is located in the Auth component
  122 + * Check whether a LOGGED in user has a set of permissions to perform a given action
87 123 * Give authorization in general
  124 + *
  125 + * 2) Autorisation APRES connexion
  126 + * (Avant, c'est beforeFilter() qui s'en occupe)
88 127 */
89 128 public function isAuthorized($user) {
  129 + /*
  130 + // ATTENTION, normalement, on devrait tester si role est défini..., mais c'est sans doute pas utile
  131 + // cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
  132 + if (isset($user['role']) && $user['role'] === 'admin') {
  133 + return true;
  134 + }
  135 + */
  136 +
90 137 $configuration = $this->confLabinvent;
  138 + $role = $this->getUserRole($user);
  139 + /*
91 140 $role = TableRegistry::get('Users')->find()
92 141 ->where(['username' => $user[$configuration->authentificationType_ldap][0]])
93 142 ->first()['role'];
  143 + */
  144 + $this->myDebug("role is ".$role);
94 145  
95   - $action = $this->request->getAttribute('params')['action'];
96   -
  146 + //BETTER:
  147 + //$action = $this->request->getAttribute('params')['action'];
  148 + //$action = $this->request->getParam('action');
  149 + $action = $this->getActionPassed();
  150 +
97 151 // error_log($action);
98 152  
99   - // ACL : Super-Admin peut accéder à chaque action
100   - if ($role == 'Super Administrateur')
101   - return true;
102   -
103   - // ACL : Pour tout le monde
  153 + // ACL : Actions accessibles à tous les roles (profils)
104 154 if (in_array($action, ['index', 'view', 'add', 'find', 'creer', 'getNextDate', 'getDateGarantie']))
105 155 return true;
  156 +
  157 + // ACL : Super-Admin peut accéder à toutes les actions
  158 + if ($role == 'Super Administrateur')
  159 + return true;
106 160  
107 161 // ACL : Par défaut refuser
108 162 return false;
... ... @@ -113,17 +167,22 @@ class AppController extends Controller {
113 167 if (! $this->CURRENT_USER) {
114 168 $configuration = $this->confLabinvent;
115 169 $username = $user ? $user[$configuration->authentificationType_ldap][0] : $this->LdapAuth->user($configuration->authentificationType_ldap)[0];
116   - $this->CURRENT_USER = TableRegistry::get('Users')
  170 + $priviledgedUser = TableRegistry::get('Users')
117 171 ->find()
118 172 ->where(['username' => $username])
119 173 //->where(['username' => $this->LdapAuth->user('cn')[0]])
120 174 ->first();
  175 + //if (! $priviledgedUser) $priviledgedUser = "Unpriviledged User (not in table utilisateurs)";
  176 + $this->CURRENT_USER = $priviledgedUser;
121 177 }
122 178 return $this->CURRENT_USER;
123 179 }
124 180 public function getUserRole($user=null) { return $this->getPriviledgedUserRole($user); }
125 181 public function getPriviledgedUserRole($user=null) {
126   - return $this->getTablePriviledgedUserFromCurrentSessionUser($user)['role'];
  182 + $priviledgedUser = $this->getTablePriviledgedUserFromCurrentSessionUser($user);
  183 + // default role is "Utilisateur" (for people who are not in the table utilisateurs)
  184 + if (! $priviledgedUser) return 'Utilisateur';
  185 + return $priviledgedUser['role'];
127 186 /*
128 187 if (! $this->CURRENT_ROLE) {
129 188 $configuration = $this->confLabinvent;
... ... @@ -137,7 +196,7 @@ class AppController extends Controller {
137 196 */
138 197 }
139 198  
140   - public function userHasRole($expectedRole, $ORMORE=false) {
  199 + private function userHasRole($expectedRole, $ORMORE=false) {
141 200 $role = $this->getUserRole();
142 201 if (! $ORMORE) return ($role == $expectedRole);
143 202 return ($this->getRoleLevel($role) >= $this->getRoleLevel($expectedRole));
... ... @@ -163,7 +222,7 @@ class AppController extends Controller {
163 222 return $false;
164 223 */
165 224 }
166   - public function userHasRoleAtLeast($expectedRole) {
  225 + private function userHasRoleAtLeast($expectedRole) {
167 226 return $this->userHasRole($expectedRole, true);
168 227 }
169 228 public function USER_IS_ADMIN_AT_LEAST() { return $this->userHasRoleAtLeast('Administration'); }
... ... @@ -178,9 +237,26 @@ class AppController extends Controller {
178 237 * {@inheritdoc}
179 238 *
180 239 * @see \Cake\Controller\Controller::beforeFilter()
  240 + *
  241 + * 1) Autorisations SANS (ou AVANT) connexion
  242 + * 2) Ensuite, c'est isAuthorized qui gère
  243 + *
181 244 */
182 245 public function beforeFilter(Event $event) {
183 246 // !!! Ne jamais autoriser l'action 'login', sinon cela va créer des problèmes sur le fonctionnement normal de AuthComponent (cf doc) !!!
  247 + //parent::beforeFilter($event);
  248 +
  249 + /* EXEMPLES d'utilisation:
  250 + // to allow all access to all actions:
  251 + if (isset($this->Auth)) {
  252 + $this->Auth->allow('*');
  253 + }
  254 + // Allow access to index & view actions:
  255 + if (isset($this->Auth)) {
  256 + $this->Auth->allowedActions = array('index', 'view');
  257 + }
  258 + */
  259 +
184 260 $configuration = $this->confLabinvent;
185 261  
186 262 if ($configuration->mode_install)
... ... @@ -224,13 +300,17 @@ class AppController extends Controller {
224 300 $this->set('configuration', $configuration);
225 301 $this->request->session()->write("authType", $configuration->authentificationType_ldap);
226 302  
  303 + //TODO: mettre ca au propre, le cas ou l'utilisateur a un role UTILISATEUR doit etre traité AVANT, en amont, et pas ici, bien trop tard
  304 + $user = $this->getUser();
  305 + $role = $this->getUserRole();
  306 + /*
227 307 $user = TableRegistry::get('Users')->find()
228 308 ->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]])
229 309 ->first();
230   -
231 310 $role = $user['role'];
232 311 if ($role == null)
233 312 $role = 'Utilisateur';
  313 + */
234 314 $this->set('role', $role);
235 315  
236 316 //$profile = $this->allProfiles["$role"];
... ...
src/Controller/CategoriesController.php
... ... @@ -19,32 +19,47 @@ class CategoriesController extends AppController
19 19  
20 20 /**
21 21 * @param $user
  22 + * @return boolean
22 23 *
23 24 * Give authorization for categories
24 25 *
25   - * @return boolean
26 26 */
27 27 public function isAuthorized($user)
28 28 {
29   - $configuration = $this->confLabinvent;
30   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
31   - $action = $this->request->getAttribute('params')['action'];
  29 + //$configuration = $this->confLabinvent;
  30 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  31 + //$action = $this->request->getAttribute('params')['action'];
  32 + $action = $this->getActionPassed();
  33 + $role = $this->getUserRole($user);
32 34  
  35 + // Actions autorisées pour tous les profils
  36 + //if (in_array($action, ['getBySurCategorie', 'getAll', 'view', 'index'])) {
  37 + if (in_array($action, ['getBySurCategorie', 'getAll'])) {
  38 + return true;
  39 + }
  40 +
  41 + /*
33 42 // Super-Admin peut accéder à chaque action
34   - if($role == 'Super Administrateur') return true;
  43 + if($role == 'Super Administrateur') return true;
  44 + */
35 45  
36   - // Administration peut ajouter, supprimer ou modifier une categorie
37   - if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
38 46  
39   - if (in_array($action, ['getBySurCategorie', 'getAll', 'view', 'index'])) {
40   - return true;
41   - }
42   -
43   - if($this->userHasRoleAtLeast('Administration Plus')) {
44   - if($action != 'delete') return true;
  47 + /*
  48 + // Administration peut ajouter, supprimer ou modifier une categorie
  49 + //if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  50 + if( in_array($action,['add','delete','edit'])) {
  51 + //if ($role == 'Administration') return true;
  52 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  53 + // Les autres n'y ont pas accès
  54 + return false;
45 55 }
  56 + */
  57 +
  58 + // Par défaut
  59 + //return false;
  60 + //return parent::isAuthorized($user);
46 61  
47   - return false;
  62 + return $this->isAuthorizedCommons();
48 63 }
49 64  
50 65 /**
... ...
src/Controller/ConfigurationsController.php
... ... @@ -27,24 +27,25 @@ class ConfigurationsController extends AppController
27 27  
28 28 /**
29 29 * @param $user
  30 + * @return boolean
30 31 *
31 32 * Give authorization for configuration
32   - *
33   - * @return boolean
34 33 */
35 34 public function isAuthorized($user)
36 35 {
37   - $configuration = $this->confLabinvent;
38   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  36 + //$configuration = $this->confLabinvent;
  37 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
39 38 $action = $this->request->getAttribute('params')['action'];
  39 + $role = $this->getUserRole($user);
40 40  
41   - // Super-Admin peut accéder à chaque action
42   - if($role == 'Super Administrateur') return true;
  41 + // TOUS
  42 + //if ($action == 'view') return true;
43 43  
44   - if($action == 'view') return true;
  44 + // Super-Admin peut accéder à chaque action
  45 + //if ($role == 'Super Administrateur') return true;
45 46  
46   - // Par défaut refuser
47   - return false;
  47 + //return false;
  48 + return parent::isAuthorized($user);
48 49 }
49 50  
50 51 /**
... ...
src/Controller/DocumentsController.php
... ... @@ -14,21 +14,33 @@ use FPDF;
14 14 class DocumentsController extends AppController {
15 15  
16 16 /**
  17 + * Give authorization for documents
17 18 *
18   - * @param $user Give
19   - * authorization for documents
  19 + * @param $user
20 20 * @return boolean
21 21 */
22 22 public function isAuthorized($user) {
23   - $configuration = $this->confLabinvent;
  23 + //$configuration = $this->confLabinvent;
  24 + $action = $this->request->getAttribute('params')['action'];
  25 + $role = $this->getUserRole($user);
  26 + /*
24 27 $role = TableRegistry::get('Users')->find()
25 28 ->where(['username' => $user[$configuration->authentificationType_ldap][0]])
26 29 ->first()['role'];
27   - $action = $this->request->getAttribute('params')['action'];
  30 + */
28 31  
  32 + // Pour tout le monde
  33 + if (in_array($action, [
  34 + //'view',
  35 + //'add',
  36 + 'ficheMateriel'
  37 + ])) return true;
  38 +
29 39 // Super-Admin peut accéder à chaque action
  40 + /*
30 41 if ($role == 'Super Administrateur')
31 42 return true;
  43 + */
32 44  
33 45 if (in_array($action, [
34 46 'admission',
... ... @@ -114,15 +126,8 @@ class DocumentsController extends AppController {
114 126 }
115 127 }
116 128  
117   - // Pour tout le monde
118   - if (in_array($action, [
119   - 'view',
120   - 'add',
121   - 'ficheMateriel'
122   - ]))
123   - return true;
124   -
125   - return false;
  129 + //return false;
  130 + return parent::isAuthorized($user);
126 131 }
127 132  
128 133 /**
... ...
src/Controller/EmpruntsController.php
... ... @@ -18,26 +18,29 @@ class EmpruntsController extends AppController
18 18  
19 19 /**
20 20 * @param $user
  21 + * @return boolean
21 22 *
22 23 * Give authorization for emprunts
23   - *
24   - * @return boolean
25 24 */
26 25 public function isAuthorized($user)
27 26 {
28   - $configuration = $this->confLabinvent;
29   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  27 + //$configuration = $this->confLabinvent;
  28 + //$action = $this->request->getAttribute('params')['action'];
  29 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  30 + $action = $this->getActionPassed();
  31 + $role = $this->getUserRole($user);
30 32  
31   - $action = $this->request->getAttribute('params')['action'];
32   -
33   - if($this->userHasRoleAtLeast('Responsable')) return true;
34   -
35   - //Pour un "utilisateur"
  33 + // Responsable + peut tout faire
  34 + //if ($this->userHasRoleAtLeast('Responsable')) return true;
  35 + if ($this->USER_IS_RESP_AT_LEAST()) return true;
  36 +
  37 + // Pour un "utilisateur"
36 38 if (in_array($action, ['edit', 'delete'])) {
37   - $id = (int)$this->request->getAttribute('params')['pass'][0];
38   - if($this->isOwnedBy($id, $user['sn'][0].' '.$user['givenname'][0])) return true;
  39 + //$id = (int)$this->request->getAttribute('params')['pass'][0];
  40 + if($this->isOwnedBy($this->getIdPassed(), $user['sn'][0].' '.$user['givenname'][0])) return true;
39 41 }
40 42  
  43 + // Par défaut
41 44 return parent::isAuthorized($user);
42 45 }
43 46  
... ...
src/Controller/FichemetrologiquesController.php
... ... @@ -15,10 +15,9 @@ class FichemetrologiquesController extends AppController
15 15 //public $helpers = array('GoogleCharts.GoogleCharts');
16 16  
17 17 /**
18   - * @param $user
19   - *
20 18 * Give authorization for fichemetrologiques
21   - *
  19 + *
  20 + * @param $user
22 21 * @return boolean
23 22 */
24 23 public function isAuthorized($user)
... ... @@ -38,8 +37,10 @@ class FichemetrologiquesController extends AppController
38 37 if($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) return true;
39 38 }
40 39  
41   - return parent::isAuthorized($user);
  40 + //return parent::isAuthorized($user);
42 41 */
  42 +
  43 + // Tout profil peut tout faire !!! (A affiner, non ?)
43 44 return true;
44 45 }
45 46  
... ...
src/Controller/FormulesController.php
... ... @@ -12,28 +12,32 @@ class FormulesController extends AppController
12 12 {
13 13  
14 14 /**
15   - * @param $user
16   - *
17 15 * Give authorization for formules
18   - *
  16 + *
  17 + * @param $user
19 18 * @return boolean
20 19 */
21 20 public function isAuthorized($user)
22 21 {
23   - $configuration = $this->confLabinvent;
24   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
25   -
26   - $action = $this->request->getAttribute('params')['action'];
  22 + //$configuration = $this->confLabinvent;
  23 + //$action = $this->request->getAttribute('params')['action'];
  24 + $action = $this->getActionPassed();
  25 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  26 + $role = $this->getUserRole($user);
27 27  
28   - if($this->userHasRoleAtLeast('Administration')) return true;
  28 + // Admin + peut tout faire
  29 + //if($this->userHasRoleAtLeast('Administration')) return true;
  30 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
29 31  
30   - //Pour un "utilisateur"
  32 + // Les autres users
31 33 if (in_array($action, ['edit', 'delete'])) {
32   - $id = (int)$this->request->getAttribute('params')['pass'][0];
33   - if($this->isOwnedBy($id, $user['sn'][0].' '.$user['givenname'][0])) return true;
34   - if($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) return true;
  34 + //$id = (int)$this->request->getAttribute('params')['pass'][0];
  35 + $id = $this->getIdPassed();
  36 + if ($this->isOwnedBy($id, $user['sn'][0].' '.$user['givenname'][0])) return true;
  37 + if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) return true;
35 38 }
36 39  
  40 + // Par défaut
37 41 return parent::isAuthorized($user);
38 42 }
39 43  
... ...
src/Controller/FournisseursController.php
... ... @@ -13,32 +13,46 @@ class FournisseursController extends AppController
13 13 {
14 14  
15 15 /**
16   - * @param $user
17   - *
18 16 * Give authorization for unite
19 17 *
  18 + * @param $user
20 19 * @return boolean
21 20 */
22 21 public function isAuthorized($user)
23 22 {
24   - $configuration = $this->confLabinvent;
25   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
26   - $action = $this->request->getAttribute('params')['action'];
  23 + //$configuration = $this->confLabinvent;
  24 + //$action = $this->request->getAttribute('params')['action'];
  25 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  26 + $action = $this->getActionPassed();
  27 + $role = $this->getUserRole($user);
27 28  
28   - // Super-Admin peut accéder à chaque action
29   - if($role == 'Super Administrateur') return true;
30   -
31   - // Administration peut ajouter, supprimer ou modifier un fournisseur
32   - if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  29 + // TOUS
  30 + /*
33 31 if (in_array($action, ['view', 'index'])) {
34 32 return true;
35 33 }
36   -
37   - if($this->userHasRoleAtLeast('Administration Plus')) {
38   - if($action != 'delete') return true;
  34 + */
  35 +
  36 + // Super-Admin peut accéder à chaque action
  37 + //if($role == 'Super Administrateur') return true;
  38 +
  39 + /*
  40 + // Administration + peut ajouter, supprimer ou modifier
  41 + if( in_array($action,['add','delete','edit'])) {
  42 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  43 + return false;
39 44 }
  45 + */
  46 +
  47 + // Administration peut ajouter, supprimer ou modifier un fournisseur
  48 + //if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  49 +
  50 + // Par défaut
  51 + //return false;
  52 + //return parent::isAuthorized($user);
  53 +
  54 + return $this->isAuthorizedCommons();
40 55  
41   - return false;
42 56 }
43 57  
44 58  
... ...
src/Controller/GroupesMetiersController.php
... ... @@ -13,33 +13,53 @@ class GroupesMetiersController extends AppController
13 13 {
14 14  
15 15 /**
16   - * @param $user
17   - *
18 16 * Give authorization for groupes metiers
19 17 *
  18 + * @param $user
20 19 * @return boolean
21 20 */
22 21 public function isAuthorized($user)
23 22 {
24   - $configuration = $this->confLabinvent;
25   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
26   - $action = $this->request->getAttribute('params')['action'];
27   -
28   - // Super-Admin peut accéder à chaque action
29   - if($role == 'Super Administrateur') return true;
30   -
31   - // Administration peut ajouter, supprimer ou modifier un métier
32   - if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
33   -
  23 + //$action = $this->request->getAttribute('params')['action'];
  24 + //$configuration = $this->confLabinvent;
  25 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  26 + $action = $this->getActionPassed();
  27 + $role = $this->getUserRole($user);
  28 +
  29 + /*
  30 + // TOUS
34 31 if (in_array($action, ['view', 'index'])) {
35 32 return true;
36 33 }
37   -
38   - if($this->userHasRoleAtLeast('Administration Plus')) {
39   - if($action != 'delete') return true;
  34 + */
  35 +
  36 + // Super-Admin peut accéder à chaque action
  37 + //if ($role == 'Super Administrateur') return true;
  38 +
  39 + /*
  40 + // AdministrationPlus peut tout faire sauf delete
  41 + if ($this->userHasRole('Administration Plus')) {
  42 + if ($action != 'delete') return true;
40 43 }
  44 + */
  45 +
  46 + /*
  47 + // Action add, ... seulement pour Admin et +
  48 + //if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  49 + if( in_array($action,['add','delete','edit'])) {
  50 + //if ($role == 'Administration') return true;
  51 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  52 + // Les autres n'y ont pas accès
  53 + return false;
  54 + }
  55 + */
41 56  
42   - return false;
  57 + // Par défaut
  58 + //return false;
  59 + //return parent::isAuthorized($user);
  60 +
  61 + return $this->isAuthorizedCommons();
  62 +
43 63 }
44 64  
45 65  
... ...
src/Controller/GroupesThematiquesController.php
... ... @@ -14,33 +14,42 @@ class GroupesThematiquesController extends AppController
14 14  
15 15  
16 16 /**
17   - * @param $user
18   - *
19 17 * Give authorization for groupes thematiques
20 18 *
  19 + * @param $user
21 20 * @return boolean
22 21 */
23 22 public function isAuthorized($user)
24 23 {
25   - $configuration = $this->confLabinvent;
26   - $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
27   - $action = $this->request->getAttribute('params')['action'];
28   -
29   - // Super-Admin peut accéder à chaque action
30   - if($role == 'Super Administrateur') return true;
31   -
32   - // Administration peut ajouter, supprimer ou modifier une thematique
33   - if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
34   -
  24 + //return (new GroupesMetiersController())->isAuthorized($user);
  25 +
  26 + //$configuration = $this->confLabinvent;
  27 + //$role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  28 + //$action = $this->request->getAttribute('params')['action'];
  29 + $action = $this->getActionPassed();
  30 + $role = $this->getUserRole($user);
  31 +
  32 + /*
35 33 if (in_array($action, ['view', 'index'])) {
36 34 return true;
37 35 }
38   -
39   - if($this->userHasRoleAtLeast('Administration Plus')) {
40   - if($action != 'delete') return true;
  36 + */
  37 +
  38 + // Super-Admin peut accéder à chaque action
  39 + //if($role == 'Super Administrateur') return true;
  40 +
  41 + /*
  42 + // Administration + peut ajouter, supprimer ou modifier
  43 + if( in_array($action,['add','delete','edit'])) {
  44 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  45 + return false;
41 46 }
42   -
43   - return false;
  47 + */
  48 +
  49 + // Par défaut
  50 + //return false;
  51 + //return parent::isAuthorized($user);
  52 + return $this->isAuthorizedCommons();
44 53 }
45 54  
46 55  
... ...
src/Controller/MaterielsController.php
... ... @@ -64,12 +64,14 @@ class MaterielsController extends AppController {
64 64 ->first()['role'];
65 65 */
66 66 $role = $this->getUserRole($user);
67   - $this->myDebug("role is ".$role);
68   - debug("role is ".$role);
  67 + //$this->myDebug("role is ".$role);
  68 + //debug("role is ".$role);
69 69 //BETTER:
70 70 //$action = $this->request->getAttribute('params')['action'];
71   - $action = $this->request->getParam('action');
72   - $id = (int) $this->request->getParam('pass.0');
  71 + //$action = $this->request->getParam('action');
  72 + $action = $this->getActionPassed();
  73 + //$id = (int) $this->request->getParam('pass.0');
  74 + $id = $this->getIdPassed();
73 75  
74 76 /*
75 77 * Structure mise en place:
... ... @@ -251,14 +253,23 @@ class MaterielsController extends AppController {
251 253 if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
252 254 break;
253 255  
  256 + /*
254 257 // Autorisations par defaut:
255 258 default:
256 259 return parent::isAuthorized($user);
257 260 break;
  261 + */
  262 +
258 263 } // end of switch case
  264 +
  265 + return parent::isAuthorized($userFromSession);
259 266 }
260 267  
261 268  
  269 + /*
  270 + * @todo A déplacer dans Model/Table/TableMateriels
  271 + * cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
  272 + */
262 273 public function isOwnedBy($id, $nomCreateur) {
263 274 return (
264 275 $this->Materiels->exists([
... ...
src/Controller/OrganismesController.php
... ... @@ -17,33 +17,45 @@ class OrganismesController extends AppController
17 17 }
18 18  
19 19 /**
20   - * @param $user
21   - *
22 20 * Give authorization for organismes
23 21 *
  22 + * @param $user
24 23 * @return boolean
25 24 */
26 25 public function isAuthorized($user)
27 26 {
  27 + /*
  28 + /*
28 29 $configuration = $this->confLabinvent;
29 30 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
30 31 $action = $this->request->getAttribute('params')['action'];
  32 + */ /*
  33 + $action = $this->getActionPassed();
  34 + $role = $this->getUserRole($user);
31 35  
32 36 // Super-Admin peut accéder à chaque action
33   - if($role == 'Super Administrateur') return true;
  37 + //if($role == 'Super Administrateur') return true;
34 38  
35 39 // Administration peut ajouter, supprimer ou modifier un organisme
36   - if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
37   -
  40 + //if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  41 + if( in_array($action,['add','delete','edit'])) {
  42 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  43 + return false;
  44 + }
  45 +
  46 + /*
38 47 if (in_array($action, ['view', 'index'])) {
39 48 return true;
40 49 }
41   -
42 50 if($this->userHasRoleAtLeast('Administration Plus')) {
43 51 if($action != 'delete') return true;
44 52 }
45   -
46   - return false;
  53 + */
  54 +
  55 + // Par défaut
  56 + //return false;
  57 + //return parent::isAuthorized($user);
  58 + return $this->isAuthorizedCommons();
47 59 }
48 60  
49 61 /**
... ...
src/Controller/PagesController.php
... ... @@ -77,6 +77,7 @@ class PagesController extends AppController
77 77 }
78 78 $this->myDebug($path);
79 79  
  80 + // @todo : faire plus proprement, dans isAuthorized()
80 81 //Si l'utilisateur n'est pas connecté, on le redirige vers la page login.ctp
81 82 //sauf si l'action demandée est 'about' ou si le mode install est activé
82 83 if (!($this->LdapAuth->user($configuration->authentificationType_ldap)[0]) && $path[0] != 'about' && !($configuration->mode_install)) {
... ... @@ -96,9 +97,11 @@ class PagesController extends AppController
96 97 $subpage = $path[1];
97 98 }
98 99  
  100 + // @todo : faire plus proprement, avec isAuthorized()
99 101 if ($page == 'tools') {
100 102 // Autoriser seulement à partir du role ADMIN et +
101   - if (! $this->userHasRoleAtLeast('Administration')) {
  103 + //if (! $this->userHasRoleAtLeast('Administration')) {
  104 + if (! $this->USER_IS_ADMIN_AT_LEAST()) {
102 105 return $this->redirect('/');
103 106 }
104 107 }
... ...
src/Controller/QrCodesController.php
... ... @@ -7,6 +7,7 @@ use \PHPQRCode\QRcode;
7 7 class QrCodesController extends AppController
8 8 {
9 9  
  10 + // @todo Autoriser "creer" dans isAuthorized de ce controleur, et non pas dans celui de AppController !!!
10 11 public function creer($message = null) {
11 12  
12 13 $fileName = $this->request->session()->id().'.png';
... ...
src/Controller/SitesController.php
... ... @@ -13,24 +13,28 @@ class SitesController extends AppController
13 13 {
14 14  
15 15 /**
16   - * @param $user
17   - *
18 16 * Give authorization for sites
19   - *
  17 + *
  18 + * @param $user
20 19 * @return boolean
21 20 */
22 21 public function isAuthorized($user)
23 22 {
  23 + /*
24 24 $configuration = $this->confLabinvent;
25 25 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
26 26 $action = $this->request->getAttribute('params')['action'];
  27 + */
  28 + $action = $this->getActionPassed();
  29 + $role = $this->getUserRole($user);
27 30  
28 31 // Super-Admin peut accéder à chaque action
29   - if($role == 'Super Administrateur') return true;
  32 + //if($role == 'Super Administrateur') return true;
30 33  
31 34 // Administration peut ajouter, supprimer ou modifier un site
32   - if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  35 + //if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
33 36  
  37 + /*
34 38 if (in_array($action, ['view', 'index'])) {
35 39 return true;
36 40 }
... ... @@ -38,8 +42,10 @@ class SitesController extends AppController
38 42 if($this->userHasRoleAtLeast('Administration Plus')) {
39 43 if($action != 'delete') return true;
40 44 }
  45 + */
41 46  
42   - return false;
  47 + //return false;
  48 + return $this->isAuthorizedCommons();
43 49 }
44 50  
45 51  
... ...
src/Controller/SousCategoriesController.php
... ... @@ -16,14 +16,15 @@ class SousCategoriesController extends AppController
16 16 }
17 17  
18 18 /**
19   - * @param $user
20   - *
21 19 * Give authorization for sous categories
22 20 *
  21 + * @param $user
23 22 * @return boolean
24 23 */
25 24 public function isAuthorized($user)
26 25 {
  26 + $action = $this->getActionPassed();
  27 + /*
27 28 $configuration = $this->confLabinvent;
28 29 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
29 30 $action = $this->request->getAttribute('params')['action'];
... ... @@ -33,16 +34,19 @@ class SousCategoriesController extends AppController
33 34  
34 35 // Administration peut ajouter, supprimer ou modifier une sous categorie
35 36 if($role == 'Administration' && in_array($action,['add','delete','edit'])) return true;
  37 + */
36 38  
37   - if (in_array($action, ['getByCategorie', 'view', 'index'])) {
38   - return true;
39   - }
  39 + //if (in_array($action, ['getByCategorie', 'view', 'index'])) {
  40 + if (in_array($action, ['getByCategorie'])) return true;
40 41  
  42 + /*
41 43 if($this->userHasRoleAtLeast('Administration Plus')) {
42 44 if($action != 'delete') return true;
43 45 }
44 46  
45 47 return false;
  48 + */
  49 + return $this->isAuthorizedCommons();
46 50 }
47 51  
48 52  
... ...
src/Controller/SuivisController.php
... ... @@ -18,21 +18,28 @@ class SuivisController extends AppController {
18 18 * @return boolean
19 19 */
20 20 public function isAuthorized($user) {
21   - $configuration = $this->confLabinvent;
  21 + //$configuration = $this->confLabinvent;
  22 + /*
22 23 $role = TableRegistry::get('Users')->find()
23 24 ->where([
24 25 'username' => $user[$configuration->authentificationType_ldap][0]
25 26 ])
26 27 ->first()['role'];
27 28 $action = $this->request->getAttribute('params')['action'];
28   - if ($this->userHasRoleAtLeast('Administration'))
29   - return true;
  29 + */
  30 + $action = $this->getActionPassed();
  31 + $role = $this->getUserRole($user);
  32 +
  33 + //if ($this->userHasRoleAtLeast('Administration'))
  34 + if ($this->USER_IS_ADMIN_AT_LEAST()) return true;
  35 +
30 36 // Pour un "utilisateur"
31 37 if (in_array($action, [
32 38 'edit',
33 39 'delete'
34 40 ])) {
35   - $id = (int) $this->request->getAttribute('params')['pass'][0];
  41 + //$id = (int) $this->request->getAttribute('params')['pass'][0];
  42 + $id = $this->getIdPassed();
36 43 if ($this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0]))
37 44 return true;
38 45 if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0]))
... ...
src/Controller/SurCategoriesController.php
... ... @@ -17,14 +17,14 @@ class SurCategoriesController extends AppController
17 17  
18 18  
19 19 /**
20   - * @param $user
21   - *
22 20 * Give authorization for sur categories
23 21 *
  22 + * @param $user
24 23 * @return boolean
25 24 */
26 25 public function isAuthorized($user)
27 26 {
  27 + /*
28 28 $configuration = $this->confLabinvent;
29 29 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
30 30 $action = $this->request->getAttribute('params')['action'];
... ... @@ -44,6 +44,8 @@ class SurCategoriesController extends AppController
44 44 }
45 45  
46 46 return false;
  47 + */
  48 + return $this->isAuthorizedCommons();
47 49 }
48 50  
49 51  
... ...
src/Controller/TypeDocumentsController.php
... ... @@ -13,14 +13,14 @@ class TypeDocumentsController extends AppController
13 13 {
14 14  
15 15 /**
16   - * @param $user
17   - *
18 16 * Give authorization for types suivis
19 17 *
  18 + * @param $user
20 19 * @return boolean
21 20 */
22 21 public function isAuthorized($user)
23 22 {
  23 + /*
24 24 $configuration = $this->confLabinvent;
25 25 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
26 26 $action = $this->request->getAttribute('params')['action'];
... ... @@ -40,6 +40,8 @@ class TypeDocumentsController extends AppController
40 40 }
41 41  
42 42 return false;
  43 + */
  44 + return $this->isAuthorizedCommons();
43 45 }
44 46  
45 47  
... ...
src/Controller/TypeSuivisController.php
... ... @@ -13,14 +13,14 @@ class TypeSuivisController extends AppController
13 13 {
14 14  
15 15 /**
16   - * @param $user
17   - *
18 16 * Give authorization for types suivis
19 17 *
  18 + * @param $user
20 19 * @return boolean
21 20 */
22 21 public function isAuthorized($user)
23 22 {
  23 + /*
24 24 $configuration = $this->confLabinvent;
25 25 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
26 26 $action = $this->request->getAttribute('params')['action'];
... ... @@ -40,6 +40,8 @@ class TypeSuivisController extends AppController
40 40 }
41 41  
42 42 return false;
  43 + */
  44 + return $this->isAuthorizedCommons();
43 45 }
44 46  
45 47  
... ...
src/Controller/UnitesController.php
... ... @@ -13,14 +13,14 @@ class UnitesController extends AppController
13 13 {
14 14  
15 15 /**
16   - * @param $user
17   - *
18 16 * Give authorization for unites
19 17 *
  18 + * @param $user
20 19 * @return boolean
21 20 */
22 21 public function isAuthorized($user)
23 22 {
  23 + /*
24 24 $configuration = $this->confLabinvent;
25 25 $role = TableRegistry::get('Users')->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
26 26 $action = $this->request->getAttribute('params')['action'];
... ... @@ -39,6 +39,8 @@ class UnitesController extends AppController
39 39 }
40 40  
41 41 return false;
  42 + */
  43 + return $this->isAuthorizedCommons();
42 44 }
43 45  
44 46  
... ...
src/Controller/UsersController.php
... ... @@ -17,44 +17,48 @@ class UsersController extends AppController
17 17 return "L'";
18 18 }
19 19  
  20 + // 1) AVANT connexion
  21 + public function beforeFilter(Event $event)
  22 + {
  23 + parent::beforeFilter($event);
  24 + $this->LdapAuth->allow(['logout']);
  25 + }
  26 +
20 27  
  28 + // 2) APRES connexion
21 29 /**
22   - * @param $user
23   - *
24 30 * Give authorization for users
25   - *
  31 + * @param $user
26 32 * @return boolean
27 33 */
28 34 public function isAuthorized($user)
29 35 {
30   - $configuration = $this->confLabinvent;
31   - $role = $this->Users->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
32   -
33   - $action = $this->request->getAttribute('params')['action'];
34   -
35   - // Super-Admin peut accéder à chaque action
36   - if($role == 'Super Administrateur') return true;
37   -
38   - //Pour tout le monde
39   - if (in_array($action, ['index', 'view', 'getLdapLogin', 'getLdapEmail','indexRecap'])) return true;
40   -
  36 + //$configuration = $this->confLabinvent;
  37 + //$role = $this->Users->find()->where(['username' => $user[$configuration->authentificationType_ldap][0]])->first()['role'];
  38 + //$action = $this->request->getAttribute('params')['action'];
  39 + $action = $this->getActionPassed();
41 40  
  41 + // Actions de CE controleur accessibles à tous les profils
  42 + //if (in_array($action, ['index', 'view', 'getLdapLogin', 'getLdapEmail','indexRecap'])) return true;
  43 + if (in_array($action, ['getLdapLogin', 'getLdapEmail','indexRecap'])) return true;
  44 +
  45 + // Inutile car déjà dit dans parent::isAuthorized()
  46 + // Super-Admin peut accéder à toutes les actions de CE controleur
  47 + //if ($role == 'Super Administrateur') return true;
  48 +
42 49 // Par défaut refuser
43   - return false;
  50 + //return false;
  51 + return parent::isAuthorized($user);
44 52 }
45 53  
46 54  
47   - public function beforeFilter(Event $event)
48   - {
49   - parent::beforeFilter($event);
50   - $this->LdapAuth->allow(['logout']);
51   - }
52 55  
53 56 public function login()
54 57 {
55 58 if ($this->request->is('post')) {
56 59  
57 60 $user = $this->LdapAuth->connection();
  61 + //debug($user);
58 62  
59 63 if ($user != FALSE) {
60 64 $this->LdapAuth->setUser($user);
... ...
src/Model/Table/LdapConnectionsTable.php
... ... @@ -62,13 +62,23 @@ class LdapConnectionsTable extends AppTable {
62 62 }
63 63 }
64 64  
65   - $prefix = "_NouvelUtilisateur_";
  65 + //EP (aout 2017)
  66 + // ATTENTION : Utilisateur IMPORTANT.
  67 + // Avec cet utilisateur, on simule un utilisateur qui n'est PAS dans la table utilisateurs
  68 + // Il devrait donc se voir attribuer un role "Utilisateur" sans pour autant que ça soit écrit dans la table !!!
  69 + // login = '_NouvelUtilisateur_username'
  70 + // pass = '_NouvelUtilisateur_password'
  71 + //$prefix = "_NouvelUtilisateur_";
66 72 $ldapUsers[] = [
67   - 'sn' => ['NOUVEL'],
68   - 'givenname' => ['UTILISATEUR'],
69   - 'mail' => [$prefix.'email'],
70   - $this->authenticationType => [$prefix.'username'],
71   - 'userpassword' => [$prefix.'password'],
  73 + 'sn' => ['UTILISATEUR'],
  74 + 'givenname' => ['FAKE_LDAP'],
  75 + //'mail' => [$login.'email'],
  76 + 'mail' => ['fakeldapuser@domain.fr'],
  77 + //$this->authenticationType => [$prefix.'username'],
  78 + $this->authenticationType => [$this->getTheFakeLdapUser()['login']],
  79 + //$this->authenticationType => ['usere'],
  80 + 'userpassword' => [$this->getTheFakeLdapUser()['pass']],
  81 + //'userpassword' => ['toto'],
72 82 ];
73 83  
74 84  
... ... @@ -86,6 +96,7 @@ class LdapConnectionsTable extends AppTable {
86 96 if (empty($this->fakeLDAPUsers)) $this->fakeLDAPUsers = $this->buildFakeLdapUsers();
87 97 return true;
88 98 }
  99 + //debug($this->fakeLDAPUsers);
89 100  
90 101 $ldapConfig = $config->toArray();
91 102  
... ... @@ -254,13 +265,21 @@ class LdapConnectionsTable extends AppTable {
254 265 return $nbUsers;
255 266 }
256 267  
  268 + // Utilisateur du ldap qui n'est pas dans la table utilisateurs
  269 + // => il a donc le role "Utilisateur" PAR DEFAUT
  270 + private function getTheFakeLdapUser() {
  271 + return [
  272 + 'login' => '_ldap_user_',
  273 + 'pass' => '_ldap_user_pass',
  274 + ];
  275 + }
257 276 public function ldapAuthentication($login, $password) {
258 277  
259 278 try {
260 279 if($this->checkConfiguration()) {
261 280  
262 281 if ($this->USE_LDAP) {
263   - if (strlen(trim($password))==0) return FALSE;
  282 + if (strlen(trim($password))==0) return FALSE;
264 283 $ldapConnection = ldap_connect($this->host, $this->port);
265 284 ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
266 285 if (@ldap_bind($ldapConnection, $this->authenticationType . '=' . $login . ',' . $this->baseDn, $password)) {
... ... @@ -273,10 +292,14 @@ class LdapConnectionsTable extends AppTable {
273 292 }
274 293 else {
275 294 $user = $this->getFakeLdapUser($login);
276   - if ($user != false && (new DefaultPasswordHasher)->check($password, $user['userpassword'][0])) {
277   - //if ($user != false && $user['userpassword'][0] == $password) {
278   - return $user;
279   - }
  295 + //debug($user);
  296 + if ($user === false) return FALSE;
  297 + // $this->authenticationType peut valoir "uid" ou "cn"... (par défaut "uid" pour le fake ldap, à confirmer...)
  298 + //if ($user['uid'][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user;
  299 + //if ($user[$this->authenticationType][0] == "_NouvelUtilisateur_username" && $user['userpassword'][0] == "_NouvelUtilisateur_password") return $user;
  300 + if ($user[$this->authenticationType][0] == $this->getTheFakeLdapUser()['login'] && $user['userpassword'][0] == $this->getTheFakeLdapUser()['pass']) return $user;
  301 + if ((new DefaultPasswordHasher)->check($password, $user['userpassword'][0])) return $user;
  302 + //if ($user != false && $user['userpassword'][0] == $password) {
280 303 }
281 304 }
282 305 }
... ...
src/Template/Layout/default.ctp
... ... @@ -115,7 +115,7 @@ $cakeDescription = 'Labinvent 2';
115 115 </i></td>
116 116 <td id="version">
117 117 <!-- VERSION M.m.f.b (version (M)ajeure, version (m)ineure, numero de nouvelle (f)onctionnalite, numero de (b)ugfix) -->
118   - <font color="black">VERSION 2.7.7 (29/08/2017)</font>
  118 + <font color="black">VERSION 2.7.8 (29/08/2017)</font>
119 119 <br/>
120 120 <font color="black"><a href="<?php
121 121  
... ...
tests/TestCase/Controller/General.php
... ... @@ -75,7 +75,9 @@ class General extends IntegrationTestCase {
75 75 //'username' => 'user1_SUPER'
76 76 'username' => $this->_session['Auth']['User']['cn'][0]
77 77 ])->first();
78   - $this->CURRENT_ROLE = $user['role'];
  78 + // Unpriviledged user
  79 + $role = $user ? $user['role'] : "Utilisateur";
  80 + $this->CURRENT_ROLE = $role;
79 81 }
80 82 return $this->CURRENT_ROLE;
81 83 }
... ... @@ -112,8 +114,12 @@ class General extends IntegrationTestCase {
112 114  
113 115 public function authAs($role) {
114 116 switch ($role) {
  117 + case 'USER_from_ldap':
  118 + $this->authUtilisateurFromLdap();
  119 + //$this->CURRENT_ROLE = 'Utilisateur';
  120 + break;
115 121 case 'USER':
116   - $this->authUtilisateur();
  122 + $this->authUtilisateurFromTable();
117 123 //$this->CURRENT_ROLE = 'Utilisateur';
118 124 break;
119 125 case 'RESP':
... ... @@ -308,9 +314,14 @@ class General extends IntegrationTestCase {
308 314 }
309 315 */
310 316  
311   - public function authUtilisateur() {
  317 + public function authUtilisateur() { $this->authUtilisateurFromTable(); }
  318 + public function authUtilisateurFromTable() {
312 319 $this->authUser('user5_USER', 'test9', 'test0');
313 320 }
  321 + public function authUtilisateurFromLdap() {
  322 + //$this->authUser('_NouvelUtilisateur_username', 'NOUVEL', 'UTILISATEUR');
  323 + $this->authUser('_ldap_user_', 'FAKE_LDAP', 'UTILISATEUR');
  324 + }
314 325 /*
315 326 $user = [
316 327 'Auth' => [
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -147,7 +147,8 @@ class MaterielsControllerTest extends General {
147 147 foreach ($this->ROLES as $role) $this->_testMatReadAllAs($role);
148 148 }
149 149 */
150   - public function testMat20ReadAllAsUser() { $this->_testMatReadAllAs('USER'); }
  150 + public function testMat20ReadAllAsUserFromLdap() { $this->_testMatReadAllAs('USER_from_ldap'); }
  151 + public function testMat20ReadAllAsUserFromTable() { $this->_testMatReadAllAs('USER'); }
151 152 public function testMat20ReadAllAsResp() { $this->_testMatReadAllAs('RESP'); }
152 153 public function testMat20ReadAllAsAdmin() { $this->_testMatReadAllAs('ADMIN'); }
153 154 public function testMat20ReadAllAsAdminP() { $this->_testMatReadAllAs('ADMINP'); }
... ... @@ -172,7 +173,7 @@ class MaterielsControllerTest extends General {
172 173 $this->assertResponseContains("Liste des matériels (6)", 'Le profil '.$role.' ne devrait PAS voir les matériels archivés.');
173 174 $this->assertResponseNotContains("A valider", 'Le profil '.$role.' ne devrait PAS avoir accès à des filtres par statut.');
174 175 }
175   - $this->assertResponseContainsIf($role, ($role != 'USER'), ["Exporter la liste complete"=>"un bouton Exporter"]);
  176 + $this->assertResponseContainsIf($role, ($this->getUserRole() != 'Utilisateur'), ["Exporter la liste complete"=>"un bouton Exporter"]);
176 177  
177 178 $this->get('/materiels/index/CREATED');
178 179 //TODO: il faudrait remplacer "false" par "true" dans ce test
... ... @@ -229,7 +230,8 @@ class MaterielsControllerTest extends General {
229 230 }
230 231 */
231 232 // test VIEW action
232   - public function testMat10ReadOneAsUser() { $this->_testMatReadOneAs('USER'); }
  233 + public function testMat10ReadOneAsUserFromLdap() { $this->_testMatReadOneAs('USER_from_ldap'); }
  234 + public function testMat10ReadOneAsUserFromTable() { $this->_testMatReadOneAs('USER'); }
233 235 public function testMat10ReadOneAsResp() { $this->_testMatReadOneAs('RESP'); }
234 236 public function testMat10ReadOneAsAdmin() { $this->_testMatReadOneAs('ADMIN'); }
235 237 public function testMat10ReadOneAsAdminPlus() { $this->_testMatReadOneAs('ADMINP'); }
... ... @@ -280,6 +282,7 @@ class MaterielsControllerTest extends General {
280 282 foreach ($this->ROLES as $role) $this->_testMatAccessCreateFormAs($role);
281 283 }
282 284 */
  285 + public function testMat30AccessCreateFormAsUserFromLdap() { $this->_testMatAccessCreateFormAs('USER_from_ldap'); }
283 286 public function testMat30AccessCreateFormAsUser() { $this->_testMatAccessCreateFormAs('USER'); }
284 287 public function testMat30AccessCreateFormAsResp() { $this->_testMatAccessCreateFormAs('RESP'); }
285 288 public function testMat30AccessCreateFormAsAdmin() { $this->_testMatAccessCreateFormAs('ADMIN'); }
... ... @@ -313,11 +316,13 @@ class MaterielsControllerTest extends General {
313 316 *
314 317 * @return void
315 318 */
  319 +
316 320 public function testMat31CreateAsSuper() { $this->_testMatCreateAs('SUPER'); }
317 321 public function testMat31CreateAsAdminp() { $this->_testMatCreateAs('ADMINP'); }
318 322 public function testMat31CreateAsAdmin() { $this->_testMatCreateAs('ADMIN'); }
319 323 public function testMat31CreateAsResp() { $this->_testMatCreateAs('RESP'); }
320 324 public function testMat31CreateAsUser() { $this->_testMatCreateAs('USER'); }
  325 + public function testMat31CreateAsUserFromLdap() { $this->_testMatCreateAs('USER_from_ldap'); }
321 326  
322 327 public function testMat32CreateAdministratifOrTechnicalAsSuper() { $this->_testMatCreateAdministratifOrTechnicalAs('SUPER'); }
323 328 private function _testMatCreateAdministratifOrTechnicalAs($role) {
... ... @@ -421,6 +426,7 @@ class MaterielsControllerTest extends General {
421 426 */
422 427 public function testMat33CreateFailsAsSuper() { $this->_testMatCreateFailsAs('SUPER'); }
423 428 public function testMat33CreateFailsAsUser() { $this->_testMatCreateFailsAs('USER'); }
  429 + public function testMat33CreateFailsAsUserFromLdap() { $this->_testMatCreateFailsAs('USER_from_ldap'); }
424 430 private function _testMatCreateFailsAs($role) {
425 431 // test with each mandatory field except materiel_administratif and materiel_technique
426 432 foreach (self::mandatoryFieldsForCreation as $mandatoryField) {
... ...