diff --git a/README.md b/README.md
index 4e00cc4..13080ea 100644
--- a/README.md
+++ b/README.md
@@ -53,16 +53,31 @@ Logiciel testé et validé sur les configurations suivantes :
VERSION ACTUELLE
-Date: 05/05/2020
-Version: 3.7.9.25
+Date: 07/05/2020
+Version: 3.7.9.26
Author: EP
Commentaire:
Diverses améliorations, simplifications, refactorisations, optimisations :
- - LOG : ajout de messages log sur actions importantes (add, edit, delete, ...)
- - SIMPLIFICATION : Suppression des valeurs "N/A" (inutile et pose des problèmes) dans 4 tables : groupes_thematiques, groupes_metiers, sites, et type_documents
- => remplacement des liens vers ces champs par NULL dans tables materiels, suivis, emprunts, et documents !!!
- - Utilisation __toString() pour afficher une entité rapidement avec echo $entity
- - bugfix ACLs isAuthorizedAction() de Materiels => début de généralisation de l'utilisation de cette fonction partout où on a besoin de connaitre les droits d'un user (view, index, ...)
+ Harmonisation :
+ - shortcuts dans AppController (donc disponible pour TOUS les controleurs) :
+ - $this->u = user courant
+ - $this->e = entité courante
+ - $this->e_id = id de l'entité courante
+ - $this->a = action en cours
+ - $this->c = controleur en cours (?)
+ - $this->getEntity($id=null) // id=null si matos courant
+ - harmonisation des noms de méthodes pour MaterielsController :
+ - $this->isCreated($id=null) // id=null si matos courant
+ - $this->belongsToUser($username, $id=null) // id=null si matos courant
+ et $this->belongsToCurrentUser($id=null) // id=null si matos courant
+ - $this->isSameGroupAsUser($userlogin, $id=null) // id=null si matos courant
+ et $this->isSameGroupAsCurrentUser($id=null) // // id=null si matos courant
+ - harmonisation des méthodes dans entité Materiel (Entity) :
+ - is_created, is_validated, is_tobearchived, is_archived
+ - belongsToUser($username) // owned or declared by user
+ - isSameGroupAsUser($usergroup1, $usergroup2) // is same group as user groups
+ - ...
+ - poursuite généralisation utilisation de la fonction isAuthorizedAction() partout où on a besoin de connaitre les droits d'un user (view, index, ...)
IMPORTANT :
- Pour connaitre la version actuelle, taper "./VERSION"
diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php
index d5322e8..f540679 100755
--- a/src/Controller/AppController.php
+++ b/src/Controller/AppController.php
@@ -66,15 +66,46 @@ class AppController extends Controller
protected $SUPERADMIN_CAN_DO_EVERYTHING = false; // (prod) Par défaut (false), il se comporte un peu comme ADMIN
//protected $SUPERADMIN_CAN_DO_EVERYTHING = true; // (dev only) no limit, peut TOUT faire (attention, pas en prod svp !!!)
- protected $confLabinvent;
- protected $action;
- protected $entity;
- protected $entity_id;
+ protected $confLabinvent = null;
+
+ // Le Controleur courant
+ protected $c = null;
+
+ // L'Action courante
+ //protected $action = null;
+ protected $a = null;
+
+ /* La table courante (objet Table)
+ *
+ * $t = TableRegistry::getTableLocator()->get('Materiels'); (ou autre entité telle que 'Suivis' par exemple...)
+ *
+ */
+ protected $t = null;
+
+ /* L'entité courante (objet Entity)
+ *
+ * $e = $t->newEntity();
+ * ou encore
+ * $e = $t->get(12);
+ * ou encore
+ * $e = $t->find(...)->first();
+ * ou encore
+ * $e = $t->find(...)->last();
+ * ...
+ */
+ //protected $entity =null;
+ protected $e = null; // remplace $entity
+
+ // id de l'entité courante (shortcut pour $this->e->id)
+ //protected $entity_id = null;
+ protected $e_id = null; // remplace $entity_id
+
+ // L'utilisateur courant (objet User Entity)
// Current (priviledged) USER (if so, otherwise = NULL) from DB (Entity class)
//private $CURRENT_PRIVILEDGED_USER = null;
- protected $current_user_entity = null;
+ //protected $current_user_entity = null;
+ protected $u = null; // remplace $current_user_entity
protected $userName = null;
-
// Current ROLE (by default = "Utilisateur")
private $CURRENT_ROLE = null;
@@ -386,7 +417,8 @@ class AppController extends Controller
/* (EP 20200428)
*
* Méthode pour optimiser les accès à la BD.
- * Retourne l'entité concernée par l'action.
+ * Retourne l'entité dont l'id est $id (en la mettant en cache pour éviter de la rechercher 2 fois)
+ * Si $id = null => retourne l'entité courante ($this->e) (entité concernée par l'action en cours)
*
* Cette méthode ne doit être appelée que lorsque c'est approprié
* (actions 'edit', 'view', ..., mais pas 'add', 'find', 'index', ...)
@@ -395,37 +427,61 @@ class AppController extends Controller
* Optimisation : l'entité n'est récupérée dans la BD qu'une seule fois pour toutes
*
*/
+ // PHP7 only
+ //protected function getEntity($id=null) : Entity {
+ // PHP>=5
protected function getEntity($id=null) {
// Si pas d'id => exception (stop)
- //assert($this->entity_id>0);
- if (!$this->entity_id && !$id) throw new \Exception(__("cette methode doit etre appelée avec un id déjà positionné !!!"));
-
- // Si l'entité actuellement en mémoire n'est pas la bonne, la mettre à null pour obliger à la recharger
- if ($id && $this->entity && $this->entity->id != $id) $this->entity = null;
-
- // Les 3 sont possibles
- //$model = $this->request->getParam('controller'); // ex: Materiels
- //$model = $this->name; // ex: Materiels
- $model = $this->modelClass; // ex: Materiels
-
- /*
- debug("model2");
- $model = $this->$model;
- debug($model);
- */
-
- //ex: if (! $this->entity) $this->entity = $this->Materiels->get($this->entity_id);
- if (!$this->entity) $this->entity = $this->$model->get($this->entity_id);
+ //assert($this->e_id>0);
+ if (!$this->e_id && !$id) throw new \Exception(__("cette methode doit etre appelée avec un id déjà positionné !!!"));
+
+ // Par défaut id = id de l'entité courante
+ if (is_null($id)) $id = $this->e_id;
+
+ // Si l'entité courante n'est pas la bonne, la mettre à null pour obliger à la recharger
+ //if ($id && $this->e && $this->e->id!=$id) $this->e = null;
+ //if ($id && $this->e && $this->e_id!=$id) $this->e = null;
+ if ($this->e && $this->e_id!=$id) $this->e = null;
+
+ if (!$this->e) {
+ // Les 3 sont possibles
+ //$model = $this->request->getParam('controller'); // ex: Materiels
+ //$model = $this->name; // ex: Materiels
+ $model = $this->modelClass; // ex: Materiels
+ /*
+ debug("model2");
+ $model = $this->$model;
+ debug($model);
+ */
+ //ex: if (! $this->e) $this->e = $this->Materiels->get($this->e_id);
+ //$this->e = $this->$model->get($this->e_id);
+ $this->e = $this->$model->get($id);
+ $this->e_id = $this->e->id;
+ }
/*
* Avec les entités associées :
- if (! $this->entity) $this->entity = $this->$model->get($this->entity_id, [
+ if (! $this->e) $this->e = $this->$model->get($this->e_id, [
'contain' => ['Comments']
]);
*/
- //debug($this->entity);
- return $this->entity;
+ //debug($this->e);
+ return $this->e;
}
+
+ public function getUsersTable() { return TableRegistry::getTableLocator()->get('Users'); }
+ // Retourne l'entity User qui a le login $userlogin ("epallier")
+ public function getUserByLogin($userlogin) {
+ if ($this->u && $this->u->username == $userlogin) return $this->u;
+ //return $users->find()->where(['username' => $userlogin])->first();
+ return $this->getUsersTable()->findByUsername($userlogin);
+ }
+ // Retourne l'entity User qui a le nom complet $fullname ("Pallier Etienne")
+ public function getUserByFullname($fullname) {
+ if ($this->u && $this->u->nom == $fullname) return $this->u;
+ //return $users->find()->where(['username' => $userlogin])->first();
+ return $this->getUsersTable()->findByNom($fullname);
+ }
/**
* (EP)
@@ -512,14 +568,14 @@ class AppController extends Controller
// error_log($action);
//$this->myDebug("- action is $action");
- $this->myDebug("- action is $this->action");
+ $this->myDebug("- action is $this->a");
// On autorise ou pas l’action demandée :
// - Super-Admin peut accéder à toutes les actions
//if ($role == 'Super Administrateur') return true;
if ($this->USER_IS_SUPERADMIN) return true;
// - Actions générales accessibles à TOUS les roles (profils), pour TOUT controleur
- if (in_array($this->action, [
+ if (in_array($this->a, [
'index',
'view',
'add',
@@ -564,7 +620,7 @@ class AppController extends Controller
}
public function getUserEntity($user = null) {
//if (! $this->CURRENT_PRIVILEDGED_USER) {
- if (! $this->current_user_entity) {
+ if (! $this->u) {
$configuration = $this->confLabinvent;
$ldapAuthType = $configuration->ldap_authenticationType;
$username = $user ? $user[$ldapAuthType] : $this->LdapAuth->user($ldapAuthType);
@@ -575,9 +631,9 @@ class AppController extends Controller
->first();
// ->where(['username' => $this->LdapAuth->user('cn')[0]])
// if (! $priviledgedUser) $priviledgedUser = "Unpriviledged User (not in table utilisateurs)";
- $this->current_user_entity = $priviledgedUser;
+ $this->u = $priviledgedUser;
}
- return $this->current_user_entity;
+ return $this->u;
}
public function getUserRole($user = null)
@@ -804,22 +860,25 @@ class AppController extends Controller
// Affichages pour debug
//pr($event);
$this->myDebug("step 1B (general): AppController.beforeFilter()");
+
$controllerName = $this->request->getParam('controller');
$this->myDebug("- controller passed : $controllerName");
+
$passedArgs = $this->request->getParam('pass');
$this->myDebug("- args passed : ", $passedArgs);
+
$query = $this->request->getQueryParams();
$this->myDebug("- query passed : ", $query);
// Initialisations pour la suite
// - L'entité concernée par l'action
// Par défaut null car certaines actions n'ont pas d'entité (ex : 'add', 'find', 'index', ...)
- $this->entity = null;
+ $this->e = null;
// - L'action demandée et son id le cas échéant (nul par défaut, égal 0)
- $this->action = $this->getActionPassed();
- $this->myDebug("- action passed : ".$this->action);
- $this->entity_id = $this->getIdPassed();
- $this->myDebug("- id passed : ".$this->action);
+ $this->a = $this->getActionPassed();
+ $this->myDebug("- action passed : ".$this->a);
+ $this->e_id = $this->getIdPassed();
+ $this->myDebug("- id passed : ".$this->a);
parent::beforeFilter($event);
@@ -867,11 +926,11 @@ class AppController extends Controller
// ATTENTION, $priviledgedUser = NULL si l'utilisateur courant n'est pas un utilisateur privilégié
// (c'est à dire s'il n'est pas dans la table "utilisateurs")
//$this->priviledgedUser = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists();
- $this->current_user_entity = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists();
+ $this->u = $this->getTablePriviledgedUserFromCurrentSessionUserIfExists();
//$role = $this->getUserRole();
$this->userRole = $this->getUserRole();
$profile = self::PROFILES["$this->userRole"];
- $this->myDebug("- priviledgedUser is {$this->current_user_entity}");
+ $this->myDebug("- priviledgedUser is {$this->u}");
$this->myDebug("- userRole is {$this->getUserRole()}", "- profile is: $profile");
// L'utilisateur connecté (return null si pas connecté)
// $this->Auth->user('id');
@@ -891,7 +950,7 @@ class AppController extends Controller
$this->set('role', $this->userRole);
$this->set('profile', $profile);
$this->set('username', $this->getCurrentUserName());
- $this->set('priviledgedUser', $this->current_user_entity);
+ $this->set('priviledgedUser', $this->u);
$this->set('USER_IS_UTILISATEUR', $this->USER_IS_UTILISATEUR);
$this->set('USER_IS_ADMIN', $this->USER_IS_ADMIN);
@@ -1197,24 +1256,24 @@ class AppController extends Controller
* @todo EP 08/2017 Nouvelle organisation des ACL avec $easyACL
*/
//$action = $this->getActionPassed();
- if (in_array($this->action, array(
+ if (in_array($this->a, array(
'add',
'edit',
'view',
'index'
))) {
- $hiddenFields = $this->getHiddenFieldsForAction($this->action);
+ $hiddenFields = $this->getHiddenFieldsForAction($this->a);
$this->set('hiddenFields', $hiddenFields);
$this->myDebug(compact("hiddenFields"));
- if (in_array($this->action, array(
+ if (in_array($this->a, array(
'add',
'edit'
))) {
- $mandatoryFields = $this->getMandatoryFieldsForAction($this->action);
+ $mandatoryFields = $this->getMandatoryFieldsForAction($this->a);
$this->set('mandatoryFields', $mandatoryFields);
- $readOnlyFields = $this->getReadOnlyFieldsForAction($this->action);
+ $readOnlyFields = $this->getReadOnlyFieldsForAction($this->a);
$this->set('readOnlyFields', $readOnlyFields);
- $haveDefaultValueFields = $this->getDefaultValueFieldsForAction($this->action);
+ $haveDefaultValueFields = $this->getDefaultValueFieldsForAction($this->a);
// only for DEBUG :
//$this->myDebug("mandat, ro, default fields=", $mandatoryFields, $readOnlyFields, $haveDefaultValueFields);
diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php
index 30d7375..5598fd5 100755
--- a/src/Controller/DocumentsController.php
+++ b/src/Controller/DocumentsController.php
@@ -269,8 +269,9 @@ class DocumentsController extends AppController
* @param $IS_ADD: True = add ; False = edit
* @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise.
*/
- private function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null) {
-
+ protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null,
+ // uniquement à cause de parent::add_or_edit() :
+ $entity_name=null, array $associated_entities=[], $with_parent=false) {
$this->myDebug("step 3: DocumentsController.add_or_edit()");
$document = $IS_ADD ? $this->Documents->newEntity() : $this->Documents->get($id, ['contain' => []]);
diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php
index 15887fb..e70d5f2 100755
--- a/src/Controller/MaterielsController.php
+++ b/src/Controller/MaterielsController.php
@@ -6,6 +6,7 @@ use Cake\ORM\TableRegistry;
use Cake\Mailer\Email;
#use Cake\ORM\Locator\TableLocator;
use Cake\Auth\FallbackPasswordHasher;
+use App\Model\Entity\Materiel;
/**
* Materiels Controller
@@ -260,28 +261,28 @@ class MaterielsController extends AppController {
$this->myDebug("step 2A (specific): MaterielsController.isAuthorized(user)");
$this->myDebug("- user is:", $user);
- //$this->current_user_entity = $this->getUserEntity();
- assert($this->current_user_entity != null);
- if ($this->current_user_entity == null) throw new \Exception("pas d'utilisateur défini !!!");
+ //$this->u = $this->getUserEntity();
+ assert($this->u != null);
+ if ($this->u == null) throw new \Exception("pas d'utilisateur défini !!!");
if ($this->isLabinventDebugMode()) {
- debug($this->current_user_entity);
+ debug($this->u);
debug("user is xxx :");
- debug($this->current_user_entity->is_user);
- debug($this->current_user_entity->is_resp);
- debug($this->current_user_entity->is_admin);
- debug($this->current_user_entity->is_adminplus);
- debug($this->current_user_entity->is_super);
+ debug($this->u->is_user);
+ debug($this->u->is_resp);
+ debug($this->u->is_admin);
+ debug($this->u->is_adminplus);
+ debug($this->u->is_super);
debug("user is xxx or more :");
- debug($this->current_user_entity->is_resp_or_more);
- debug($this->current_user_entity->is_admin_or_more);
+ debug($this->u->is_resp_or_more);
+ debug($this->u->is_admin_or_more);
debug("user is xxx or less :");
- debug($this->current_user_entity->is_resp_or_less);
- debug($this->current_user_entity->is_admin_or_less);
+ debug($this->u->is_resp_or_less);
+ debug($this->u->is_admin_or_less);
}
@@ -318,7 +319,7 @@ class MaterielsController extends AppController {
// $id = (int) $this->request->getParam('pass.0');
//$id = $this->getIdPassed();
- ///$this->entity_id = $this->getIdPassed();
+ ///$this->e_id = $this->getIdPassed();
//debug($id);
// ACTIONS QUI SONT TOUJOURS AUTORISÉES QUELQUE SOIT LE PROFIL
@@ -340,7 +341,7 @@ class MaterielsController extends AppController {
return $article->user_id === $user['id'];
*/
- $id = $this->entity_id;
+ $id = $this->e_id;
/* (EP 20200430 déplacé dans isAuthorizedAction())
// On autorise ou pas l’action demandée :
@@ -348,9 +349,9 @@ class MaterielsController extends AppController {
// (sauf certaines actions afin de lui donner un comportement proche de ADMIN)
if ($this->USER_IS_SUPERADMIN) {
// edit ou add by copy => ssi CREATED
- if ( $this->action =='edit' || ($this->action=='add' && $id>0) ) return $this->isCreated($id);
+ if ( $this->a =='edit' || ($this->a=='add' && $id>0) ) return $this->isCreated($id);
// archivage => admin only
- //if ($this->action == 'statusArchived') return false;
+ //if ($this->a == 'statusArchived') return false;
// tout le reste => ok
return true;
}
@@ -360,12 +361,12 @@ class MaterielsController extends AppController {
* //return $this->isAuthorizedAction($this, $user, $role, $action, $id);
* Tout le reste en dessous de cette ligne devient inutile !!!
*/
- $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->userRole, $this->action, $id, $user));
+ $this->myDebug("isAuthorizedAction ? " . $this->isAuthorizedAction2($this, $this->userRole, $this->a, $id, $user));
return $this->isAuthorizedAction();
/*
return $this->isAuthorizedAction(
$this->userRole,
- $this->action, $id,
+ $this->a, $id,
$user,
$this->userCname
);
@@ -389,13 +390,13 @@ class MaterielsController extends AppController {
*
*/
private function isAuthorizedAction($action = null) {
- if (!$action) $action = $this->action;
+ if (!$action) $action = $this->a;
//$id = $this->getIdPassed();
- //debug("action $action, id $this->entity_id");
+ //debug("action $action, id $this->e_id");
//return $this->isAuthorizedActionFor($action, $this->getIdPassed(), $this->userRole, $this->userFromSession, $this->userCname);
return $this->isAuthorizedActionFor(
- $action ? $action : $this->action,
- $this->entity_id,
+ $action ? $action : $this->a,
+ $this->e_id,
$this->userRole,
$this->userFromSession, $this->userCname
);
@@ -419,7 +420,7 @@ class MaterielsController extends AppController {
//$this->myDebug("- user is ", $user);
- //debug($this->entity->tititoto());
+ //debug($this->e->tititoto());
// Raccourci pour SUPERADMIN : par défaut il a (presque) TOUS les droits, donc c'est vite vu !
// (sauf certaines actions afin de lui donner un comportement proche de ADMIN)
if ($this->USER_IS_SUPERADMIN) {
@@ -443,14 +444,14 @@ class MaterielsController extends AppController {
if ( ($action=='add' && $id>0) || in_array($action,['edit', 'delete', 'statusValidated']) ) {
return $this->isCreated($id);
}
- //if ($this->action==’statusValidated’) return $this->isCreated($id);
+ //if ($this->a==’statusValidated’) return $this->isCreated($id);
if ($action=='statusToBeArchived') return $this->isValidated($id);
if ($action=='statusArchived') return $this->isToBeArchived($id);
if ($action=='statusCreated') return ! $this->isCreated($id);
if ($action=='printLabelRuban') return $this->confLabinvent->hasPrinter && $this->isValidated($id);
}
// archivage => admin only
- //if ($this->action == 'statusArchived') return false;
+ //if ($this->a == 'statusArchived') return false;
// tout le reste => ok
return true;
}
@@ -498,7 +499,10 @@ class MaterielsController extends AppController {
//$isHis = $this->isHis($id, $user);
//$isHis = $this->isHis($id);
$isHis = $this->belongsToCurrentUser($id);
- return $role=='Utilisateur' ? $isHis : $isHis||$this->isRespGroup($id, $userCname);
+ //return $role=='Utilisateur' ? $isHis : $isHis||$this->isRespGroup($id, $userCname);
+ //return $role=='Utilisateur' ? $isHis : $isHis||$this->isSameGroupAsUser($id, $userCname);
+ ///////return $role=='Utilisateur' ? $isHis : $isHis||$this->isSameGroupAsUser($userCname, $id);
+ return $role=='Utilisateur' ? $isHis : $isHis||$this->isSameGroupAsCurrentUser($id);
/*
if ($role=='Utilisateur') return $isHis;
// Responsable
@@ -634,9 +638,9 @@ class MaterielsController extends AppController {
// if ($action == 'edit') {
case 'edit':
/S
- debug("entity is"); debug($this->entity);
+ debug("entity is"); debug($this->e);
$this->getEntity();
- debug("entity is"); debug($this->entity);
+ debug("entity is"); debug($this->e);
S/
// BETTER:
// $id = (int) $this->request->getAttribute('params')['pass'][0];
@@ -752,7 +756,9 @@ class MaterielsController extends AppController {
case 'statusCreated':
if ($this->isCreated($id)) return FALSE;
if ($this->USER_IS_USER()) return FALSE;
- if ($this->USER_IS_RESP()) return $this->isRespGroup($id, $userCname);
+ //if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($id, $userCname);
+ /////if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($userCname, $id);
+ if ($this->USER_IS_RESP()) return $this->isSameGroupAsCurrentUser($id);
return true;
// VALIDATION d'un materiel (passe à VALIDATED)
@@ -760,7 +766,8 @@ class MaterielsController extends AppController {
//$id = (int) $this->request->getAttribute('params')['pass'][0];
if (! $this->isCreated($id)) return FALSE;
if ($this->USER_IS_USER()) return FALSE;
- if ($this->USER_IS_RESP()) return $this->isRespGroup($id, $userCname);
+ //if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($userCname, $id);
+ if ($this->USER_IS_RESP()) return $this->isSameGroupAsCurrentUser($id);
return true;
/*
@@ -792,7 +799,8 @@ class MaterielsController extends AppController {
case 'statusToBeArchived':
if (! $this->isValidated($id)) return FALSE;
if ($this->USER_IS_USER()) return FALSE;
- if ($this->USER_IS_RESP()) return $this->isRespGroup($id, $userCname);
+ //if ($this->USER_IS_RESP()) return $this->isSameGroupAsUser($userCname, $id);
+ if ($this->USER_IS_RESP()) return $this->isSameGroupAsCurrentUser($id);
return TRUE;
/*
if ($this->isValidated($id))
@@ -870,11 +878,13 @@ class MaterielsController extends AppController {
* cf https://book.cakephp.org/3.0/fr/tutorials-and-examples/blog-auth-example/auth.html
*/
// True if materiel with id $id is owned by $nomCreateur
- public function isOwnedBy($id, $user_name)
- {
+ //public function isOwnedBy($id, $username)
+ public function belongsToUser($username, $id=null) {
+ if (is_null($id)) $id = $this->e_id;
//$entity = $this->getEntity($id);
//return in_array($user_name, [$entity->nom_createur, $entity->nom_responsable]);
- return $this->getEntity($id)->isOwnedOrDeclaredByUser($user_name);
+ //return $this->getEntity($id)->isOwnedOrDeclaredByUser($username);
+ return $this->getEntity($id)->belongsToUser($username);
/*
return ($this->Materiels->exists([
'id' => $id,
@@ -887,22 +897,42 @@ class MaterielsController extends AppController {
}
// True if materiel with id $id is owned by current user
+ // Par défaut, si $id = null => id du materiel courant
//public function isHis($id, $userFromSession) {
//public function isHis($matos_id) {
- public function belongsToCurrentUser($id) {
+ public function belongsToCurrentUser($id=null) {
+ if (is_null($id)) $id = $this->e_id;
//return ($this->isOwnedBy($id, $userFromSession['sn'][0] . ' ' . $userFromSession['givenname'][0]));
- return $this->isOwnedBy($id, $this->current_user_entity->nom);
+ //return $this->isOwnedBy($id, $this->u->nom);
+ return $this->belongsToUser($this->u->nom, $id);
}
-
- public function isRespGroup($id, $loginResponsable)
- {
+ // Par défaut, si $id = null => id du materiel courant
+ public function isSameGroupAsCurrentUser($id=null) {
+ if (is_null($id)) $id = $this->e_id;
+ $u = $this->u;
+ return $this->isSameGroupAsUser($u->username, $id);
+ }
+
+ // Par défaut, si $id = null => id du materiel courant
+ //public function isRespGroup($id, $loginResponsable)
+ //public function isSameGroupAsUser($id, $loginResponsable)
+ public function isSameGroupAsUser($userlogin, $id=null) {
+ if (is_null($id)) $id = $this->e_id;
// Get user
+ if ($this->u && $this->u->username == $userlogin)
+ $u = $this->u;
+ else
+ $u = $this->getUserByLogin($userlogin);
+ /*
$u = TableRegistry::getTableLocator()->get('Users')
->find()
- ->where(['username' => $loginResponsable])
+ ->where(['username' => $userlogin])
->first();
+ */
+ return $this->getEntity($id)->isSameGroupAsUser($u->groupes_metier_id, $u->groupes_thematique_id);
+ /* OLD WAY
// Responsable groupe métier ?
$group = 'groupes_metier';
$group_fk = $group.'_id';
@@ -914,15 +944,15 @@ class MaterielsController extends AppController {
->where(['nom =' => 'N/A'])
->first()['id']
) return $this->getEntity($id)->$group_fk == $u[$group_fk];
- /*
+ /S
return $this->Materiels->exists([
'id' => $id,
'groupes_metier_id' => $u['groupes_metier_id']
]);
- */
+ S/
// Responsable groupe thématique ?
- $group = 'groupe_thematique';
+ $group = 'groupes_thematique';
$group_fk = $group.'_id';
if (
$u[$group_fk] !== null
@@ -932,20 +962,23 @@ class MaterielsController extends AppController {
->where(['nom =' => 'N/A'])
->first()['id']
) return $this->getEntity($id)->$group_fk == $u[$group_fk];
- /*
+ /S
return $this->Materiels->exists([
'id' => $id,
'groupes_thematique_id' => $u['groupe_thematique_id']
]);
- */
+ S/
// sinon, pas responsable de groupe
return false;
+ */
- } // isRespGroup
+ } // isSameGroupAsUser (ex isRespGroup)
- public function hasStatus($id, $status) {
+ // $id = id du materiel => si null alors id du materiel courant
+ public function hasStatus($id=null, $status) {
+ if (is_null($id)) $id = $this->e_id;
return $this->getEntity($id)->status == $status;
/*
return $this->Materiels->exists([
@@ -954,10 +987,10 @@ class MaterielsController extends AppController {
]);
*/
}
- public function isCreated($id) { return $this->hasStatus($id, 'CREATED'); }
- public function isValidated($id) { return $this->hasStatus($id, 'VALIDATED'); }
- public function isToBeArchived($id) { return $this->hasStatus($id, 'TOBEARCHIVED'); }
- public function isArchived($id) { return $this->hasStatus($id, 'ARCHIVED'); }
+ public function isCreated($id=null) { return $this->hasStatus($id, 'CREATED'); }
+ public function isValidated($id=null) { return $this->hasStatus($id, 'VALIDATED'); }
+ public function isToBeArchived($id=null) { return $this->hasStatus($id, 'TOBEARCHIVED'); }
+ public function isArchived($id=null) { return $this->hasStatus($id, 'ARCHIVED'); }
/**
@@ -1097,6 +1130,7 @@ class MaterielsController extends AppController {
]);
} // index()
+
/**
* View method
*
@@ -1134,6 +1168,7 @@ class MaterielsController extends AppController {
'Fournisseurs'
]
]);
+ $e = $materiel;
/*
* (EP) TODO:
@@ -1151,44 +1186,75 @@ class MaterielsController extends AppController {
*
*/
+ /*
$IS_CREATED = ($materiel->status == 'CREATED');
$IS_VALIDATED = ($materiel->status == 'VALIDATED');
$IS_TOBEARCHIVED = ($materiel->status == 'TOBEARCHIVED');
$IS_ARCHIVED = ($materiel->status == 'ARCHIVED');
-
+ */
+ $IS_CREATED = $e->is_created;
+ $IS_VALIDATED = $e->is_validated;
+ $IS_TOBEARCHIVED = $e->is_tobearchived;
+ $IS_ARCHIVED = $e->is_archived;
+ $this->set(compact('IS_CREATED', 'IS_VALIDATED', 'IS_TOBEARCHIVED', 'IS_ARCHIVED'));
// Current user is creator or owner of current materiel
+ /*
$USER_IS_CREATOR_OR_OWNER = in_array($this->userName, [
$materiel->nom_createur,
$materiel->nom_responsable
]);
+ */
+ //$USER_IS_CREATOR_OR_OWNER = $e->isOwnedOrDeclaredByUser($this->userName);
+ $USER_IS_CREATOR_OR_OWNER = $e->belongsToUser($this->userName);
$this->set(compact('USER_IS_CREATOR_OR_OWNER'));
// Current user is same group as current materiel
- $USER_IS_SAME_GROUP_AS_MATERIEL = (
+ /*
+ //$USER_IS_SAME_GROUP_AS_MATERIEL = $e->isSameGroupAsUser($user_group_metier_id, $user_group_thematique_id);
+ $USER_IS_SAME_GROUP_AS_MATERIEL =
+ (
//( isset($this->priviledgedUser->groupes_metier_id) && $this->priviledgedUser->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->priviledgedUser->groupes_metier_id )
- ( isset($this->current_user_entity->groupes_metier_id) && $this->current_user_entity->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->current_user_entity->groupes_metier_id )
+ ( isset($this->u->groupes_metier_id) && $this->u->groupes_metier_id != $this->idGmNa && $materiel->groupes_metier_id == $this->u->groupes_metier_id )
||
- ( isset($this->current_user_entity->groupe_thematique_id) && $this->current_user_entity->groupe_thematique_id != $this->idGtNa && $materiel->groupes_thematique_id == $this->current_user_entity->groupe_thematique_id )
+ ( isset($this->u->groupe_thematique_id) && $this->u->groupe_thematique_id != $this->idGtNa && $materiel->groupes_thematique_id == $this->u->groupe_thematique_id )
);
+ */
+ //$USER_IS_SAME_GROUP_AS_MATERIEL = $this->currentMaterielIsSameGroupAsCurrentUser();
+ $USER_IS_SAME_GROUP_AS_MATERIEL = $this->isSameGroupAsCurrentUser();
$this->set(compact('USER_IS_SAME_GROUP_AS_MATERIEL'));
$USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL = $this->USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL;
$this->set(compact('USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL'));
$CONTEXT1 = $this->USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL;
+
+ /*
$CAN_VALIDATE_OR_INVALIDATE = $this->USER_IS_ADMIN_OR_MORE || ( $materiel->materiel_administratif==0 && $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL );
$CAN_VALIDATE = $IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE;
-
- $CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE;
- $CAN_TBA = $IS_VALIDATED && $CONTEXT1;
- $CAN_ARCHIVE = $IS_TOBEARCHIVED && $this->USER_IS_ADMIN_OR_MORE;
+ */
+ $CAN_VALIDATE = $this->isAuthorizedAction('statusValidated');
+ //$CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE;
+ $CAN_INVALIDATE = $this->isAuthorizedAction('statusCreated');
+ //$CAN_TBA = $IS_VALIDATED && $CONTEXT1;
+ $CAN_TBA = $this->isAuthorizedAction('statusTobearchived');
+ //$CAN_ARCHIVE = $IS_TOBEARCHIVED && $this->USER_IS_ADMIN_OR_MORE;
+ $CAN_ARCHIVE = $this->isAuthorizedAction('statusArchived');
$this->set(compact('CAN_VALIDATE', 'CAN_INVALIDATE', 'CAN_TBA', 'CAN_ARCHIVE'));
-
+
+ // TODO:
+ //$CAN_ATTACH_A_DOC = DocumentsController::isAuthorizedAction('add');
+ // et idem pour tous les autres
$CAN_ATTACH_A_DOC = $CONTEXT1;
+
$CAN_MANAGE_SUIVIS = $CONTEXT1;
+ $CAN_EDIT_OR_DELETE_SUIVIS = $CAN_MANAGE_SUIVIS;
+
$CAN_MANAGE_EMPRUNTS = $CONTEXT1;
- $CAN_MANAGE_FILES = $CONTEXT1;
+ $CAN_EDIT_OR_DELETE_EMPRUNTS = $CAN_MANAGE_EMPRUNTS;
+
+ $CAN_MANAGE_FILES = $CONTEXT1; // edit, delete, ou envoi devis par mail
+
$this->set(compact('CAN_ATTACH_A_DOC', 'CAN_MANAGE_SUIVIS', 'CAN_MANAGE_EMPRUNTS', 'CAN_MANAGE_FILES'));
// NEW
@@ -1197,8 +1263,9 @@ class MaterielsController extends AppController {
$CAN_EDIT = $this->isAuthorizedAction('edit');
// OLD
//$CAN_EDIT = $IS_CREATED && $CAN_ATTACH_A_DOC;
- $CAN_COPY = $CAN_EDIT;
-
+ //$CAN_COPY = $CAN_EDIT;
+ $CAN_COPY = $this->isAuthorizedAction('add', $id);
+
$CAN_DELETE = $this->isAuthorizedAction('delete');
//debug($CAN_DELETE);
@@ -1210,7 +1277,7 @@ class MaterielsController extends AppController {
// $status = $this->allStatus[$materiel->status];
$status = self::allStatus[$materiel->status];
- $this->set(compact('status', 'IS_CREATED', 'IS_VALIDATED', 'IS_TOBEARCHIVED', 'IS_ARCHIVED'));
+ $this->set(compact('status'));
$sites = TableRegistry::getTableLocator()->get('Sites');
//$sites = TableLocator::get('Sites');
@@ -1226,16 +1293,17 @@ class MaterielsController extends AppController {
//$fournisseurs = TableLocator::get('Fournisseurs');
if ($materiel->photo_id != null) {
- $imgMateriel = $materiel->photo_id . '.' . TableRegistry::get('Documents')->get($materiel->photo_id)->get('type_doc');
+ $imgMateriel = $materiel->photo_id . '.' . TableRegistry::getTableLocator()->get('Documents')->get($materiel->photo_id)->get('type_doc');
$this->set('imgMateriel', $imgMateriel);
}
$this->set('PDF_ENGINE', $this->confLabinvent->pdf_engine);
$entity = $materiel;
- $this->set(compact('sites', 'typeDocuments', 'fournisseurs',
- 'entity'
+ $this->set(compact('entity'));
+ $this->set(compact(
//'materiel', // @deprecated
+ 'sites', 'typeDocuments', 'fournisseurs'
));
/* (EP) inutile
$this->set('_serialize', [
diff --git a/src/Controller/QrCodesController.php b/src/Controller/QrCodesController.php
index 66d7331..b61a6b2 100644
--- a/src/Controller/QrCodesController.php
+++ b/src/Controller/QrCodesController.php
@@ -8,7 +8,8 @@ class QrCodesController extends AppController
{
public function isAuthorized($user) {
- return ($this->action == 'creer');
+ //return ($this->action == 'creer');
+ return ($this->a == 'creer');
// Si aucune règle ci-dessus n'a return true (ou false)
// => DEFAULT PARENT RULE
// (on appelle la méthode isAuthorized() de AppController)
diff --git a/src/Model/Entity/Materiel.php b/src/Model/Entity/Materiel.php
index 7f3b712..d34cce6 100755
--- a/src/Model/Entity/Materiel.php
+++ b/src/Model/Entity/Materiel.php
@@ -57,8 +57,7 @@ use Cake\ORM\Entity;
* @property \App\Model\Entity\Fournisseur $fournisseur
* @property bool $metrologie
*/
-class Materiel extends Entity
-{
+class Materiel extends Entity {
/**
* Fields that can be mass assigned using newEntity() or patchEntity().
@@ -90,10 +89,16 @@ class Materiel extends Entity
protected function _getIsTobearchived() { return $this->status == 'TOBEARCHIVED'; }
protected function _getIsArchived() { return $this->status == 'ARCHIVED'; }
+ // Ce matériel est utilisé ou déclaré par l'utilisateur $userfullname
+ // is Owned Or Declared By User
+ // fullname = "Pallier Etienne"
//public function isUsedOrCreatedByUser($user) {
- public function isOwnedOrDeclaredByUser($username) {
- return in_array($username, [$this->nom_createur, $this->nom_responsable]);
+ //public function isOwnedOrDeclaredByUser($username) {
+ public function belongsToUser($userfullname) {
+ return in_array($userfullname, [$this->nom_createur, $this->nom_responsable]);
}
+
+ // Ce matériel a le même groupe que l'un de ceux de l'utilisateur courant
public function isSameGroupAsUser($user_group_metier_id, $user_group_thematique_id) {
// Responsable groupe métier ?
//if ($this->groupes_metier_id==null && $this->groupes_thematique_id==null) return false;
diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php
index da4faad..df8fa14 100755
--- a/src/Model/Table/MaterielsTable.php
+++ b/src/Model/Table/MaterielsTable.php
@@ -467,7 +467,7 @@ class MaterielsTable extends AppTable
*
* On récupère le NOM du fournisseur saisi dans le champ appelé fournisseur.name (en php)
* En Html ça correspond à fournisseur['name']
- * Si saisie vide => mettre à nul
+ * Si saisie vide => mettre à null
* Sinon, chercher le fournisseur_id correspondant à ce nom
* Si id trouvé => fournisseur_id = cet id
* Sinon, créer un nouveau fournisseur avec ce nom
diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp
index cfb39fc..2de77a7 100755
--- a/src/Template/Materiels/view.ctp
+++ b/src/Template/Materiels/view.ctp
@@ -672,7 +672,8 @@ if ($role == 'Super Administrateur') {
|| ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)) {
*/
if ($CAN_MANAGE_SUIVIS) {
- // Edit Suivis
+
+ // - Edit Suivis
$echoActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Suivis', 'edit', $suivi->id);
/*
echo $this->Html->link(__(''), [
@@ -684,7 +685,8 @@ if ($role == 'Super Administrateur') {
'style' => 'margin:0'
]);
*/
- // Delete Suivis
+
+ // - Delete Suivis
//$echoActionButton($this->Html, 'icon-trash', $bStyle, '', 'Suivis', 'delete', $suivi->id, [], "", "");
echo ' '.$this->Form->postLink(__(''), [
'controller' => 'Suivis',
@@ -695,6 +697,7 @@ if ($role == 'Super Administrateur') {
'style' => 'margin:0',
'confirm' => __('Êtes-vous sur de vouloir annuler ce suivi #{0} ?', $suivi->id)
]);
+
}
?>
@@ -800,7 +803,8 @@ if ($role == 'Super Administrateur') {
$bEdit = $bDelete = '';
//if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER ) {
if ($CAN_MANAGE_EMPRUNTS) {
- // Edit Emprunt
+
+ // - Edit Emprunt
$bEdit = $this->MyButton->getActionButton('icon-pencil', $bStyle, '', 'Emprunts', 'edit', $emprunt->id);
//$bEdit = $getActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Emprunts', 'edit', $emprunt->id);
//echo $bEdit;
@@ -814,7 +818,8 @@ if ($role == 'Super Administrateur') {
'style' => 'margin:0'
]);
*/
- // Delete Emprunt
+
+ // - Delete Emprunt
$bDelete = $this->Form->postLink(__(''), [
'controller' => 'Emprunts',
'action' => 'delete',
@@ -826,6 +831,7 @@ if ($role == 'Super Administrateur') {
'confirm' => __('Êtes-vous sur de vouloir annuler cet emprunt #{0}?', $emprunt->id)
]
);
+
}
// champ virtuel (calculé) statut
$style_red = 'style="color: red"';
@@ -930,9 +936,10 @@ if ($role == 'Super Administrateur') {
]);
}
- // 2 - icone EDIT
//if ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER) {
if ($CAN_MANAGE_FILES) {
+
+ // 2 - icone EDIT
$echoActionButton($this->Html, 'icon-pencil', $bStyle, '', 'Documents', 'edit', $document->id);
/*
echo $this->Html->link(__(''), [
diff --git a/src/Template/Suivis/view.ctp b/src/Template/Suivis/view.ctp
index e802ce5..b73f63c 100755
--- a/src/Template/Suivis/view.ctp
+++ b/src/Template/Suivis/view.ctp
@@ -10,7 +10,7 @@ $role = $role;
$priviledgedUser = $priviledgedUser;
// functions
$printTableRow = $printTableRow;
-debug($suivi);
+//debug($suivi);
/*
debug($suivi->nom_createur);
debug($username);
--
libgit2 0.21.2