Gestion automatique pour l'API des authentifications ('warehouse' uniquement, 'admin' à faire) + permissions classiques
This commit is contained in:
parent
30f0ba8e82
commit
5be6228d31
|
@ -144,7 +144,7 @@
|
||||||
|
|
||||||
"getById": {
|
"getById": {
|
||||||
"description": "Retourne un utilisateur spécifique.",
|
"description": "Retourne un utilisateur spécifique.",
|
||||||
"permissions": [],
|
"permissions": ["warehouse"],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"id_user": { "description": "UID de l'utilisateur.", "type": "id" }
|
"id_user": { "description": "UID de l'utilisateur.", "type": "id" }
|
||||||
},
|
},
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function init(){
|
public static function check(){
|
||||||
/* (1) Initialisation
|
/* (1) Initialisation
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = [];
|
if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = [];
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
|
|
||||||
/* (4) On vérifie l'authentification par BDD
|
/* (4) On vérifie l'authentification par BDD
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
if( !self::check() )
|
if( !self::deepCheck() )
|
||||||
$_SESSION['AUTH'] = [];
|
$_SESSION['AUTH'] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,15 +67,15 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function check(){
|
public static function deepCheck(){
|
||||||
/* [1] Si aucune authentification
|
/* [1] Si aucune authentification
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( authLevel() == 0 )
|
if( self::auth() == 0 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* [2] Si authentification unique
|
/* [2] Si authentification unique
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( authLevel() >= 1 ){
|
if( self::auth() >= 1 ){
|
||||||
$checkRoot = new Repo('warehouse/getByToken', [ $_SESSION['AUTH'][0] ]);
|
$checkRoot = new Repo('warehouse/getByToken', [ $_SESSION['AUTH'][0] ]);
|
||||||
|
|
||||||
// Si le token n'existe pas
|
// Si le token n'existe pas
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
|
|
||||||
/* [3] Si authentification double
|
/* [3] Si authentification double
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( authLevel() >= 2 ){
|
if( self::auth() >= 2 ){
|
||||||
$checkBranch = new Repo('admin/getByToken', [ $_SESSION['AUTH'][1] ]);
|
$checkBranch = new Repo('admin/getByToken', [ $_SESSION['AUTH'][1] ]);
|
||||||
|
|
||||||
// Si le token n'existe pas
|
// Si le token n'existe pas
|
||||||
|
@ -99,6 +99,69 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* VERIFICATION DES ACCES EN FONCTION DE PERMISSIONS ATTENDUES
|
||||||
|
*
|
||||||
|
* @expected<array> Liste des permissions attendues
|
||||||
|
*
|
||||||
|
* @return status<Boolean> Si FALSE, pas la permission, sinon si
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function permission($expected){
|
||||||
|
/* [0] Mise à jour de l'authentification
|
||||||
|
=========================================================*/
|
||||||
|
self::check();
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Gestion de l'AUTH (authentification)
|
||||||
|
=========================================================*/
|
||||||
|
|
||||||
|
/* (1) Si entrepot requis, mais manquant
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
if( in_array('warehouse', $expected) && self::auth() < 1 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* (2) Si admin requis, mais manquant
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
if( in_array('admin', $expected) && self::auth() < 2 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* (3) On retire 'warehouse' et 'admin' de @expected
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$warehouseIndex = array_search('warehouse', $expected);
|
||||||
|
$adminIndex = array_search('admin', $expected);
|
||||||
|
if( is_int($warehouseIndex) ) unset($expected[$warehouseIndex]);
|
||||||
|
if( is_int($adminIndex) ) unset($expected[$adminIndex]);
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Gestion des permissions
|
||||||
|
=========================================================*/
|
||||||
|
foreach($expected as $permission)
|
||||||
|
// Si il manque au minimum une permission, on retourne FALSE
|
||||||
|
if( !in_array($permission, $_SESSION['PERM']) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var_dump('warehouse: ok');
|
||||||
|
|
||||||
|
/* [3] Si on a toutes les permissions requises
|
||||||
|
=========================================================*/
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* RENVOIE LE NIVEAU D'AUTHENTIFICATION
|
||||||
|
*
|
||||||
|
* @return auth<int> Niveau d'authentification (0 à 2)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function auth(){
|
||||||
|
return !is_array($_SESSION['AUTH']) ? 0 : count($_SESSION['AUTH']);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace manager;
|
namespace manager;
|
||||||
use \manager\Database;
|
use \manager\Database;
|
||||||
|
use \manager\Authentification;
|
||||||
|
|
||||||
|
|
||||||
class ModuleRequest{
|
class ModuleRequest{
|
||||||
|
@ -37,7 +38,7 @@
|
||||||
* @return status<Boolean> Retourne si oui ou non tout s'est bien passe
|
* @return status<Boolean> Retourne si oui ou non tout s'est bien passe
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function __construct($path=null, $params=null, $token=null){
|
public function __construct($path=null, $params=null){
|
||||||
// Si pas parametre manquant, on quitte
|
// Si pas parametre manquant, on quitte
|
||||||
if( $path == null ){
|
if( $path == null ){
|
||||||
$this->error = ManagerError::MissingPath;
|
$this->error = ManagerError::MissingPath;
|
||||||
|
@ -78,7 +79,7 @@
|
||||||
|
|
||||||
/* [3] Verification des droits
|
/* [3] Verification des droits
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( !$this->checkPermission($token) ) // Si on a pas les droits
|
if( !$this->checkPermission() ) // Si on a pas les droits
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
@ -262,11 +263,6 @@
|
||||||
*/
|
*/
|
||||||
public static function fromPost($url, $post){
|
public static function fromPost($url, $post){
|
||||||
|
|
||||||
/* [0] Verification de l'authentification
|
|
||||||
=========================================================*/
|
|
||||||
// On definit le token
|
|
||||||
$token = isset($_SERVER['PHP_AUTH_DIGEST']) ? $_SERVER['PHP_AUTH_DIGEST'] : null;
|
|
||||||
|
|
||||||
/* [1] On verifie que le @path est renseigne
|
/* [1] On verifie que le @path est renseigne
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) Si le path est dans @url */
|
/* (1) Si le path est dans @url */
|
||||||
|
@ -303,7 +299,7 @@
|
||||||
/* [4] On retourne une instance de <ModuleRequest>
|
/* [4] On retourne une instance de <ModuleRequest>
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// On cree notre requete avec le token
|
// On cree notre requete avec le token
|
||||||
return new ModuleRequest($post['path'], $params, $token);
|
return new ModuleRequest($post['path'], $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -363,12 +359,10 @@
|
||||||
|
|
||||||
/* RETOURNE SI ON A LA PERMISSION D'EXECUTER CETTE METHODE
|
/* RETOURNE SI ON A LA PERMISSION D'EXECUTER CETTE METHODE
|
||||||
*
|
*
|
||||||
* @token<String> Token d'acces a l'API (OPTIONNEL)
|
|
||||||
*
|
|
||||||
* @return permission<bool> Retourne si on a les droits ou pas pour executer cette methode
|
* @return permission<bool> Retourne si on a les droits ou pas pour executer cette methode
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private function checkPermission($token=null){
|
private function checkPermission(){
|
||||||
/* [1] On recupere les informations utiles
|
/* [1] On recupere les informations utiles
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// On recupere le nom de la methode
|
// On recupere le nom de la methode
|
||||||
|
@ -377,52 +371,20 @@
|
||||||
// Si aucune permission n'est definie
|
// Si aucune permission n'est definie
|
||||||
if( !isset($method['permissions']) ) return true;
|
if( !isset($method['permissions']) ) return true;
|
||||||
|
|
||||||
/* [2] Gestion si un @token est defini
|
|
||||||
|
|
||||||
|
/* [2] Vérification des permissions et de l'authentification
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( Database::check('sha1', $token) ){
|
$granted = Authentification::permission($method['permissions']);
|
||||||
|
|
||||||
|
/* (1) On retourne FAUX si aucun droit n'a ete trouve */
|
||||||
/* (1) On verifie que le token est valide */
|
if( !$granted ){
|
||||||
$checkToken = new Repo('token/check', [$token] );
|
|
||||||
$token_permissions = $checkToken->answer();
|
|
||||||
|
|
||||||
// Si le token est invalide, on retourne une erreur -> FAUX
|
|
||||||
if( $token_permissions === false ){
|
|
||||||
$this->error = ManagerError::TokenError;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$local_permissions = $token_permissions;
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Gestion si aucun token, avec utilisateur connecté
|
|
||||||
=========================================================*/
|
|
||||||
}else if( isset($_SESSION['permission']) )
|
|
||||||
$local_permissions = $_SESSION['permission'];
|
|
||||||
// Si ni token, ni SESSION, erreur
|
|
||||||
else{
|
|
||||||
$this->error = ManagerError::PermissionError;
|
$this->error = ManagerError::PermissionError;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (2) On retourne VRAI si la permission est ok */
|
||||||
/* [4] Verification des droits parmi les permissions donnees
|
return true;
|
||||||
=========================================================*/
|
|
||||||
/* (1) On recupere la liste des permissions possibles */
|
|
||||||
$permissions = $method['permissions'];
|
|
||||||
|
|
||||||
/* (2) Si aucune permission n'est definie, on laisse l'acces */
|
|
||||||
if( count($permissions) == 0 ) return true;
|
|
||||||
|
|
||||||
/* (3) On verifie qu'il y a au moins une permission ok */
|
|
||||||
foreach($permissions as $permission)
|
|
||||||
if( in_array($permission, $local_permissions) ) return true;
|
|
||||||
|
|
||||||
|
|
||||||
/* [5] On retourne FAUX si aucun droit n'a ete trouve
|
|
||||||
=========================================================*/
|
|
||||||
$this->error = ManagerError::PermissionError;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,15 +78,6 @@
|
||||||
|
|
||||||
/* [3] Gestion des authentifications et des droits
|
/* [3] Gestion des authentifications et des droits
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
\manager\Authentification::init();
|
\manager\Authentification::check();
|
||||||
|
|
||||||
/* (0) Retourne le niveau de connexion */
|
|
||||||
function authLevel(){ return !is_array($_SESSION['AUTH']) ? 0 : count($_SESSION['AUTH']); }
|
|
||||||
|
|
||||||
/* (1) Retourne si l'utilisateur est connecte ou non */
|
|
||||||
function connected(){ return isset($_SESSION['PERM']) && count($_SESSION['PERM']) > 0; }
|
|
||||||
|
|
||||||
/* (2) Retourne si l'utilisateur a le status en question */
|
|
||||||
function permission($type){ return connected() && in_array($type, $_SESSION['PERM']); }
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -335,8 +335,8 @@
|
||||||
$opt_data['lastname'],
|
$opt_data['lastname'],
|
||||||
$opt_data['mail'],
|
$opt_data['mail'],
|
||||||
$opt_data['password'],
|
$opt_data['password'],
|
||||||
$opt_data['status'])
|
$opt_data['status']
|
||||||
];
|
]);
|
||||||
|
|
||||||
|
|
||||||
return [ 'status' => $request->answer() ];
|
return [ 'status' => $request->answer() ];
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
<?php define('__ROOT__', dirname(dirname(__FILE__)) );
|
<?php define('__ROOT__', dirname(dirname(__FILE__)) );
|
||||||
require_once __ROOT__.'/manager/autoloader.php';
|
require_once __ROOT__.'/manager/autoloader.php';
|
||||||
|
|
||||||
|
use \manager\Authentification;
|
||||||
|
|
||||||
|
|
||||||
var_dump($_SESSION['AUTH']);
|
var_dump($_SESSION['AUTH']);
|
||||||
var_dump( authLevel() );
|
var_dump( Authentification::auth() );
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in New Issue