From 50d7babcdab21927e2296d9e60138e0c0acfd442 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 24 Oct 2016 15:47:28 +0200 Subject: [PATCH] Correction des permissions (`ModuleManager` etc) --- autoloader.php | 4 ++-- build/api/core/ModuleRequest.php | 13 +++++++------ build/api/module/user.php | 4 +++- config/modules.json | 2 +- public_html/index.php | 15 ++++++++++++--- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/autoloader.php b/autoloader.php index f03a9a4..5d239f9 100644 --- a/autoloader.php +++ b/autoloader.php @@ -52,10 +52,10 @@ /* [3] Gestion des droits des utilisateurs =========================================================*/ /* (1) Retourne si l'utilisateur est connecte ou non */ - function connected(){ return isset($_SESSION['permission']) && $_SESSION['permission']; } + function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']); } /* (2) Retourne si l'utilisateur a le status en question */ - function permission(){ return connected() && $_SESSION['permission']; } + function permission($type){ return connected() && in_array($type, $_SESSION['permission']); } ?> diff --git a/build/api/core/ModuleRequest.php b/build/api/core/ModuleRequest.php index abd3973..90b803c 100644 --- a/build/api/core/ModuleRequest.php +++ b/build/api/core/ModuleRequest.php @@ -400,7 +400,7 @@ /* [3] Gestion si aucun token, avec utilisateur connecté =========================================================*/ }else if( isset($_SESSION['permission']) ) - $local_permissions = $_SESSION['permission'] ? ['admin'] : []; + $local_permissions = $_SESSION['permission']; // Si ni token, ni SESSION, erreur else{ @@ -408,7 +408,6 @@ return false; } - /* [4] Verification des droits parmi les permissions donnees =========================================================*/ /* (1) On recupere la liste des permissions possibles */ @@ -417,15 +416,17 @@ /* (2) Si aucune permission n'est definie, on laisse l'acces */ if( !$permissions == 0 ) return true; - /* (3) On verifie qu'il y a au moins une permission ok */ + /* (3) On verifie qu'il y a aucune permission manquante */ foreach($permissions as $permission) - if( in_array($permission, $local_permissions) ) return true; + if( !in_array($permission, $local_permissions) ){ + $this->error = ManagerError::PermissionError; + return false; + } /* [5] On retourne FAUX si aucun droit n'a ete trouve =========================================================*/ - $this->error = ManagerError::PermissionError; - return false; + return true; } diff --git a/build/api/module/user.php b/build/api/module/user.php index c070ad5..b086b34 100644 --- a/build/api/module/user.php +++ b/build/api/module/user.php @@ -33,7 +33,7 @@ =========================================================*/ $_SESSION['userid'] = $user['id_user']; $_SESSION['username'] = $user['login']; - $_SESSION['permission'] = true; + $_SESSION['permission'] = ['admin']; /* [4] Retour de l'id user =========================================================*/ @@ -53,6 +53,8 @@ $_SESSION['userid'] = null; $_SESSION['username'] = null; $_SESSION['permission'] = []; + + return ['ModuleError' => ManagerError::Success]; } diff --git a/config/modules.json b/config/modules.json index 2f8c566..2c61331 100755 --- a/config/modules.json +++ b/config/modules.json @@ -66,7 +66,7 @@ "logout": { "description": "Deconnexion", - "permissions": [], + "permissions": ["admin"], "parameters": {} }, diff --git a/public_html/index.php b/public_html/index.php index 781d382..b4746be 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -10,6 +10,8 @@ use \api\core\Checker; use \manager\MenuManager; + // var_dump($_SESSION); + /*******************************************/ /* DEBUGGER */ @@ -26,7 +28,7 @@ /* (1) Valeurs par defaut */ if( !isset($_SESSION['userid']) ) $_SESSION['userid'] = null; if( !isset($_SESSION['username']) ) $_SESSION['username'] = null; - if( !isset($_SESSION['permission']) ) $_SESSION['permission'] = false; + if( !isset($_SESSION['permission']) ) $_SESSION['permission'] = []; /* (2) Gestion de la connection */ @@ -43,13 +45,19 @@ $login = new ModuleRequest('user/login', [ 'login' => $_POST['login'], 'password' => $_POST['password'] ]); $login_ans = $login->dispatch(); - // Si aucune erreur, on dit qu'on vient de se connecter + // Si aucune erreur, on dit qu'on vient de se connecter if( $login_ans->error == ManagerError::Success ) $_SESSION['login_status'] = 'logged'; - else // Si on n'a pas les bonnes donnees + + // Si on n'a pas les bonnes donnees + else $_SESSION['login_status'] = 'error'; } + // var_dump($login_vars); + // var_dump($_SESSION); + // exit(); + /* (3) Gestion de le deconnexion */ $logout_vars = isset($_POST['logout-sub']); @@ -62,6 +70,7 @@ // Si aucune erreur, on dit qu'on vient de se deconnecter if( $logout_ans->error == ManagerError::Success ) $_SESSION['login_status'] = 'unlogged'; + }