From 0065a652f65a8e6bc545a7af8a4ca6f984065539 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Thu, 16 Sep 2021 19:28:01 +0200 Subject: [PATCH] Vue Stats de connexion améliorée --- CHANGELOG | 14 +++++++++++--- README.md | 2 +- src/Controller/AppController.php | 79 ------------------------------------------------------------------------------- src/Controller/StatsController.php | 2 +- src/Controller/UsersController.php | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/Model/Table/LdapConnectionsTable.php | 2 +- src/Template/Stats/index.ctp | 6 ++++++ 7 files changed, 153 insertions(+), 88 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 371f13b..d9880bf 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -354,9 +354,11 @@ Commencer à implémenter le nouveau workflow v5 : *) TESTS !!!! + *) Trop de mails envoyés !! + *) Validation multiple ne marche plus - *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ? + *) Mail "[LabInvent] Ajout de matériel(s)" => c'est quoi ? ==> voir message de log associé (quelle diff avec "[LabInvent] Ajout d'un matériel" ??) *) Les tests doivent se faire avec la config par défaut (et non pas celle spécifique du labo) @@ -364,8 +366,7 @@ Commencer à implémenter le nouveau workflow v5 : *) Ajouter test Commande (avec devis joint !) *) Stats de connexion - - à trier anti-chrono - - supprimer menu haut gauche (new stats, list users, new user...) ??? + - le tri des autres colonnes ne marche plus *) TBO ou ARCHIVED (= validated) : ne pas autoriser edit ou delete des docs attachés @@ -422,6 +423,13 @@ Commencer à implémenter le nouveau workflow v5 : ======= CHANGES ======= ------- +16/09/2021 v5.2.12-3.7.9 + - (e) Stats de connexion + - à trier anti-chrono + - supprimer menu haut gauche (new stats, list users, new user...) ??? + - supprimer actions view/edit/delete + +------- 16/09/2021 v5.2.11-3.7.9 - Bugfix bug sur 1ère connexion d'un nouvel utilisateur - Cache Ldap (table users) forcé pour éviter ce bug diff --git a/README.md b/README.md index b4e166a..e3880f4 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 16/09/2021 -Version: v5.2.11-3.7.9 +Version: v5.2.12-3.7.9 diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 3ea762d..ca2a3c1 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -264,85 +264,6 @@ class AppController extends Controller ]; */ - - - - - // (OLD AVIRER) EP 08/2017 - // protected $easyACL = array( - const OLD_easyACL = array( - - /** - * Default ACL for ALL (logged) users - * - * Les actions non mentionnées sont accessibles à tous (par défaut), - * exemple 'find', 'index'... - * Ces default ACL peuvent être surchargées pour un profil précis - * (par exemple pour 'USER' qui est plus restreint) - */ - // 'ALL' => array ( - 'DEFAULT' => array( - // 'action' => 'condition for execution' (= 'Y', 'N', or ''), - // with like "'field name' == 'value'" - // !!! Used for test, DO NOT REMOVE : !!! - 'action_CAS4_Y' => 'Y', - 'action_CAS4_N' => 'N' - // YOUR RULES : - // CRUD actions : - // 'edit' => 'N', // update - // 'delete' => 'N', - ), - - // Ajoute des ACL plus spécifiques (ci-dessus) pour le profil USER qui est plus restreint - // Les actions absentes ne sont pas surchargées (elles sont exécutées selon les conditions définies pour 'ALL') - 'USER' => array( - // !!! Used for test, DO NOT REMOVE : !!! - 'action_CAS3_Y' => 'Y', - 'action_CAS3_N' => 'N', - // YOUR RULES : - // CRUD actions - 'add' => 'Y', // C - 'index' => 'Y', // R all - 'view' => 'Y', // R one - // 'edit' => 'N', // U - 'edit' => 'is_creator', // is_creator = (nom_createur == CURRENT_USER_NAME) - 'delete' => 'N', // D - // OTHER actions - 'find' => 'Y' // create - /* - * ceci n'a aucun sens car l'action sur le modèle "Pages" s'appelle toujours "display" (et non pas tools, infos, ou printers...) - * 'tools' => 'N', - * 'infos' => 'N', - * 'printers' => 'N', - */ - ), - - // Surcharge des ACL par défaut (ci-dessus) pour le profil RESPONSABLE qui est plus restreint - // Les actions absentes ne sont pas surchargées (elles sont exécutées selon les conditions définies pour 'ALL') - 'RESPONSABLE' => array(), - - // Surcharge des ACL par défaut (ci-dessus) pour le profil ADMIN - 'ADMIN' => array( - // 'add' => 'Y', // create - 'edit' => 'Y' // update - // 'delete' => 'Y', // update - ), - - /* - // Surcharge des ACL par défaut (ci-dessus) pour le profil ADMINPLUS - 'ADMINPLUS' => array( - // 'edit' => 'Y', // update - ), - */ - - // Surcharge des ACL par défaut (ci-dessus) pour le profil SUPERADMIN - 'SUPERADMIN' => array( - // 'add' => 'Y', // create - // 'edit' => 'Y', // update - 'delete' => 'Y' - ) - ); - // $easyACL // Valeurs par défaut pour TOUS les controleurs //const actionNounAndPastVerbs = [ diff --git a/src/Controller/StatsController.php b/src/Controller/StatsController.php index 629404e..d3db95d 100644 --- a/src/Controller/StatsController.php +++ b/src/Controller/StatsController.php @@ -22,7 +22,7 @@ class StatsController extends AppController $this->paginate = [ 'contain' => ['Users'] ]; - $stats = $this->paginate($this->Stats); + $stats = $this->paginate($this->Stats)->sortBy('last_login_time'); $this->set(compact('stats')); } diff --git a/src/Controller/UsersController.php b/src/Controller/UsersController.php index 114496a..7c1b9b1 100755 --- a/src/Controller/UsersController.php +++ b/src/Controller/UsersController.php @@ -12,6 +12,7 @@ use Cake\ORM\Entity; const SessionTimeoutON = false; //const SessionTimeoutON = true; +// DEBUG temporaire, uniquement pour ce fichier (module level) //const DEBUG=true; const DEBUG=false; @@ -208,7 +209,10 @@ class UsersController extends AppController { $user['userpassword'] = $pass; //debug($user); } - /* Voici ce que contient $user en mode fakeldap : + /* Voici ce que contient $user : + + - en mode fakeldap : + [ 'sn' => [ (int) 0 => 'Pallier' @@ -226,6 +230,59 @@ class UsersController extends AppController { (int) 0 => 'mot-de-passe-crypté' ] ] + + - en mode vrai ldap (IRAP) : + + [ + 'cn' => [ + 'count' => (int) 1, + (int) 0 => 'Teddy Bai' + ], + (int) 0 => 'cn', + 'mail' => [ + 'count' => (int) 1, + (int) 0 => 'no_mail' + ], + (int) 1 => 'mail', + ... + 'uid' => [ + 'count' => (int) 1, + (int) 0 => 'tbai' + ], + (int) 7 => 'uid', + 'sn' => [ + 'count' => (int) 1, + (int) 0 => 'Bai' + ], + (int) 8 => 'sn', + 'givenname' => [ + 'count' => (int) 1, + (int) 0 => 'Teddy' + ], + (int) 9 => 'givenname', + 'arrivaldate' => [ + 'count' => (int) 1, + (int) 0 => '02/11/2020' + ], + (int) 13 => 'arrivaldate', + 'birthday' => [ + 'count' => (int) 1, + (int) 0 => '29/05/1991' + ], + (int) 14 => 'birthday', + 'title' => [ + 'count' => (int) 1, + (int) 0 => 'M' + ], + (int) 19 => 'title', + 'site' => [ + 'count' => (int) 1, + (int) 0 => 'Roche' + ], + (int) 20 => 'site', + ... + 'dn' => 'uid=tbai,ou=users,dc=irap,dc=omp,dc=eu' + ] */ ///if (SessionTimeoutON) @@ -360,9 +417,82 @@ class UsersController extends AppController { //debug($all_users); for ($i = 0; $i < 2; $i++) debug($all_users[$i]); throw new \ErrorException("Pas de user trouvé dans la table users pour 'username'=$user_login"); - } + /* + + Voici ce qui est affiché pour $all_users : + + object(App\Model\Entity\User) { + 'id' => (int) 1, + 'created' => null, + 'modified' => object(Cake\I18n\FrozenTime) { + + 'time' => '2019-06-06T14:48:42+02:00', + 'timezone' => 'Europe/Paris', + 'fixedNowTime' => false + }, + 'nom' => 'Hillembrand Cedric', + 'username' => 'chillembrand', + 'email' => 'Cedric.Hillembrand@...', + 'role' => 'Super Administrateur', + 'groupes_metier_id' => (int) 3, + 'is_resp_groupes_metier' => false, + 'password' => null, + 'groupes_thematique_id' => null, + 'is_resp_groupes_thematique' => false, + 'sur_categorie_id' => null, + '[new]' => false, + '[accessible]' => [ + '*' => true, + 'id' => false + ], + '[dirty]' => [], + '[original]' => [], + '[virtual]' => [], + '[hasErrors]' => false, + '[errors]' => [], + '[invalid]' => [], + '[repository]' => 'Users' + + } + + object(App\Model\Entity\User) { + + 'id' => (int) 5, + 'created' => null, + 'modified' => object(Cake\I18n\FrozenTime) { + 'time' => '2019-06-06T14:48:43+02:00', + 'timezone' => 'Europe/Paris', + 'fixedNowTime' => false + }, + 'nom' => 'Pallier Etienne', + 'username' => 'epallier', + 'email' => 'Etienne.Pallier@...', + 'role' => 'Super Administrateur', + 'groupes_metier_id' => (int) 3, + 'is_resp_groupes_metier' => false, + 'password' => null, + 'groupes_thematique_id' => null, + 'is_resp_groupes_thematique' => false, + 'sur_categorie_id' => null, + '[new]' => false, + '[accessible]' => [ + '*' => true, + 'id' => false + ], + '[dirty]' => [], + '[original]' => [], + '[virtual]' => [], + '[hasErrors]' => false, + '[errors]' => [], + '[invalid]' => [], + '[repository]' => 'Users' + } + */ + + } // $user is null + return $user; - } + } // _getCurrentUserEntityFromSession() /* diff --git a/src/Model/Table/LdapConnectionsTable.php b/src/Model/Table/LdapConnectionsTable.php index b06b4ee..89f07e4 100644 --- a/src/Model/Table/LdapConnectionsTable.php +++ b/src/Model/Table/LdapConnectionsTable.php @@ -16,7 +16,7 @@ const LDAP_CACHE_ALWAYS_ON = true; // - NON => le CACHE LDAP (table users) n'est utilisé QUE si l'option ldap_cached est activée dans la config //const LDAP_CACHE_ALWAYS_ON = false; -// DEBUG temporaire, uniquement pour ce fichier (module) +// DEBUG temporaire, uniquement pour ce fichier (module level) //const DEBUG = true; const DEBUG = false; diff --git a/src/Template/Stats/index.ctp b/src/Template/Stats/index.ctp index 404370c..6ef0db8 100644 --- a/src/Template/Stats/index.ctp +++ b/src/Template/Stats/index.ctp @@ -53,6 +53,7 @@ echo "
";echo "
"; ?> +

@@ -74,7 +76,9 @@ echo "
";echo "
"; + @@ -113,11 +117,13 @@ echo "
";echo "
"; ?> + -- libgit2 0.21.2
Paginator->sort('connex_dur_tot', "Temps connexion cumulé (mn)") ?> Paginator->sort('connex_nb', "Nb connexions") ?>