diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 90de980..77bf5e8 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -63,124 +63,169 @@ class MaterielsController extends AppController { $this->role = $role; $action = $this->request->params['action']; - // INDEX, VIEW, ADD, FIND - // ACL: Accessibles à tous ( cf parent::isAuthorized() ) - - // EDIT - if ($action == 'edit') { - $id = (int) $this->request->params['pass'][0]; - - // (EP) TODO: il me semble qu'on devrait ajouter ici - // || $this->isToBeArchived($id) - // ainsi qu'une autre règle pour isArchived($id) - // ??? + switch ($action) { - /* (EP) ACL: - * - * - adminplus et superadmin sont autorisés par défaut dans tous les cas - * - * SSi materiel CREATED ou VALIDATED, autoriser : - * - user : si createur de la fiche ou owner du materiel - * - resp : si responsable du groupe thematique ou metier de ce materiel - * - admin et + : toujours - * - */ - if ($this->isCreated($id) || $this->isValidated($id)) { - - if ($role == 'Utilisateur' && $this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])) { - return true; - } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { - return true; - } else if ($this->userHasRole('Administration')) { - return true; - } - } - if ($this->userHasRole('Administration Plus')) { - return true; - } - } + // INDEX, VIEW, ADD, FIND + // ACL: Accessibles à tous ( cf parent::isAuthorized() ) + + // EDIT + //if ($action == 'edit') { + case 'edit': + $id = (int) $this->request->params['pass'][0]; + + // (EP) TODO: il me semble qu'on devrait ajouter ici + // || $this->isToBeArchived($id) + // ainsi qu'une autre règle pour isArchived($id) + // ??? + + /* (EP) ACL: + * + * - adminplus et superadmin sont autorisés par défaut dans tous les cas + * + * SSi materiel CREATED ou VALIDATED, autoriser : + * - user : si createur de la fiche ou owner du materiel + * - resp : si responsable du groupe thematique ou metier de ce materiel + * - admin et + : toujours + * + */ + if ($this->isCreated($id) || $this->isValidated($id)) { - // DELETE - if ($action == 'delete') { - $id = (int) $this->request->params['pass'][0]; - - /* (EP) ACL: - * SSi materiel CREATED, autoriser : - * - user : si createur de la fiche ou owner du materiel - * - resp : si responsable du groupe thematique ou metier de ce materiel - * - admin et + : toujours - */ - if ($this->isCreated($id)) { - if ($role == 'Utilisateur' && $this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])) { - return true; - } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { - return true; - } else if ($this->userHasRole('Administration')) { - return true; + /* + if ($role == 'Utilisateur' && $this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])) { + return true; + } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { + return true; + } else if ($this->userHasRole('Administration')) { + return true; + } + */ + switch ($role) { + case 'Utilisateur': + return ($this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])); + break; + case 'Responsable': + return ($this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])); + break; + // All other roles : Admin and more + default: + return true; + break; + } } - } - } - - if ($action == 'statusValidated') { - $id = (int) $this->request->params['pass'][0]; - if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { - if ($this->isCreated($id)) { + if ($this->userHasRole('Administration Plus')) { return true; } - } else if ($this->userHasRole('Administration')) { + break; + + + + // DELETE + case 'delete': + $id = (int) $this->request->params['pass'][0]; + + /* (EP) ACL: + * SSi materiel CREATED, autoriser : + * - user : si createur de la fiche ou owner du materiel + * - resp : si responsable du groupe thematique ou metier de ce materiel + * - admin et + : toujours + */ if ($this->isCreated($id)) { - return true; + /* + if ($role == 'Utilisateur' && $this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])) { + return true; + } else if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { + return true; + } else if ($this->userHasRole('Administration')) { + return true; + } + */ + switch ($role) { + case 'Utilisateur': + return ($this->isOwnedBy($id, $user['sn'][0] . ' ' . $user['givenname'][0])); + break; + case 'Responsable': + return ($this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])); + break; + // All other roles : Admin and more + default: + return true; + break; + } } - } - } + break; - if ($action == 'statusToBeArchived') { - $id = (int) $this->request->params['pass'][0]; - if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { - if ($this->isValidated($id)) { - return true; - } - } else if ($this->userHasRole('Administration')) { - if ($this->isValidated($id)) { - return true; + case 'statusValidated': + $id = (int) $this->request->params['pass'][0]; + if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { + if ($this->isCreated($id)) { + return true; + } + } else if ($this->userHasRole('Administration')) { + if ($this->isCreated($id)) { + return true; + } } - } - } - - if ($action == 'statusArchived') { - $id = (int) $this->request->params['pass'][0]; - if ($this->userHasRole('Administration')) { - if ($this->isToBeArchived($id)) { - if ($role == 'Super Administrateur') { - return false; - } else { + break; + + case 'statusToBeArchived': + $id = (int) $this->request->params['pass'][0]; + if ($role == 'Responsable' && $this->isRespGroup($id, $user[$configuration->authentificationType_ldap][0])) { + if ($this->isValidated($id)) { + return true; + } + } else if ($this->userHasRole('Administration')) { + if ($this->isValidated($id)) { return true; } } - } - } - - if ($action == 'export') { - if ($this->userHasRole('Responsable')) { - return true; - } - } - - if (in_array($action, [ - 'execActions', - 'setLabelIsPlaced', - 'setLabelIsPlacedOrNotPlaced', - 'setLabelIsNotPlaced', - 'printLabelRuban' - ])) { - if ($this->userHasRole('Administration')) { - return true; - } - } + break; + + case 'statusArchived': + $id = (int) $this->request->params['pass'][0]; + if ($this->userHasRole('Administration')) { + if ($this->isToBeArchived($id)) { + if ($role == 'Super Administrateur') { + return false; + } else { + return true; + } + } + } + break; + + case 'export': + if ($this->userHasRole('Responsable')) { + return true; + } + break; + + /* + if (in_array($action, [ + 'execActions', + 'setLabelIsPlaced', + 'setLabelIsPlacedOrNotPlaced', + 'setLabelIsNotPlaced', + 'printLabelRuban' + ])) { + */ + case 'execActions': + case 'setLabelIsPlaced': + case 'setLabelIsPlacedOrNotPlaced': + case 'setLabelIsNotPlaced': + case 'printLabelRuban': + if ($this->userHasRole('Administration')) { + return true; + } + break; + + // Autorisations par defaut: + default: + return parent::isAuthorized($user); + ; + break; + } // end of switch case + } - // Autorisations par defaut: - return parent::isAuthorized($user); - } public function isOwnedBy($id, $nomCreateur) { return ($this->Materiels->exists([ -- libgit2 0.21.2