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": {
|
||||
"description": "Retourne un utilisateur spécifique.",
|
||||
"permissions": [],
|
||||
"permissions": ["warehouse"],
|
||||
"parameters": {
|
||||
"id_user": { "description": "UID de l'utilisateur.", "type": "id" }
|
||||
},
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
*
|
||||
*/
|
||||
public static function init(){
|
||||
public static function check(){
|
||||
/* (1) Initialisation
|
||||
---------------------------------------------------------*/
|
||||
if( !isset($_SESSION['AUTH']) ) $_SESSION['AUTH'] = [];
|
||||
|
@ -56,7 +56,7 @@
|
|||
|
||||
/* (4) On vérifie l'authentification par BDD
|
||||
---------------------------------------------------------*/
|
||||
if( !self::check() )
|
||||
if( !self::deepCheck() )
|
||||
$_SESSION['AUTH'] = [];
|
||||
}
|
||||
|
||||
|
@ -67,15 +67,15 @@
|
|||
*
|
||||
*
|
||||
*/
|
||||
public static function check(){
|
||||
public static function deepCheck(){
|
||||
/* [1] Si aucune authentification
|
||||
=========================================================*/
|
||||
if( authLevel() == 0 )
|
||||
if( self::auth() == 0 )
|
||||
return false;
|
||||
|
||||
/* [2] Si authentification unique
|
||||
=========================================================*/
|
||||
if( authLevel() >= 1 ){
|
||||
if( self::auth() >= 1 ){
|
||||
$checkRoot = new Repo('warehouse/getByToken', [ $_SESSION['AUTH'][0] ]);
|
||||
|
||||
// Si le token n'existe pas
|
||||
|
@ -85,7 +85,7 @@
|
|||
|
||||
/* [3] Si authentification double
|
||||
=========================================================*/
|
||||
if( authLevel() >= 2 ){
|
||||
if( self::auth() >= 2 ){
|
||||
$checkBranch = new Repo('admin/getByToken', [ $_SESSION['AUTH'][1] ]);
|
||||
|
||||
// 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;
|
||||
use \manager\Database;
|
||||
use \manager\Authentification;
|
||||
|
||||
|
||||
class ModuleRequest{
|
||||
|
@ -37,7 +38,7 @@
|
|||
* @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
|
||||
if( $path == null ){
|
||||
$this->error = ManagerError::MissingPath;
|
||||
|
@ -78,7 +79,7 @@
|
|||
|
||||
/* [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;
|
||||
|
||||
|
||||
|
@ -262,11 +263,6 @@
|
|||
*/
|
||||
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) Si le path est dans @url */
|
||||
|
@ -303,7 +299,7 @@
|
|||
/* [4] On retourne une instance de <ModuleRequest>
|
||||
=========================================================*/
|
||||
// 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
|
||||
*
|
||||
* @token<String> Token d'acces a l'API (OPTIONNEL)
|
||||
*
|
||||
* @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
|
||||
=========================================================*/
|
||||
// On recupere le nom de la methode
|
||||
|
@ -377,52 +371,20 @@
|
|||
// Si aucune permission n'est definie
|
||||
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 verifie que le token est valide */
|
||||
$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{
|
||||
/* (1) On retourne FAUX si aucun droit n'a ete trouve */
|
||||
if( !$granted ){
|
||||
$this->error = ManagerError::PermissionError;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/* [4] Verification des droits parmi les permissions donnees
|
||||
=========================================================*/
|
||||
/* (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;
|
||||
/* (2) On retourne VRAI si la permission est ok */
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -78,15 +78,6 @@
|
|||
|
||||
/* [3] Gestion des authentifications et des droits
|
||||
=========================================================*/
|
||||
\manager\Authentification::init();
|
||||
|
||||
/* (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']); }
|
||||
\manager\Authentification::check();
|
||||
|
||||
?>
|
||||
|
|
|
@ -335,8 +335,8 @@
|
|||
$opt_data['lastname'],
|
||||
$opt_data['mail'],
|
||||
$opt_data['password'],
|
||||
$opt_data['status'])
|
||||
];
|
||||
$opt_data['status']
|
||||
]);
|
||||
|
||||
|
||||
return [ 'status' => $request->answer() ];
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?php define('__ROOT__', dirname(dirname(__FILE__)) );
|
||||
require_once __ROOT__.'/manager/autoloader.php';
|
||||
|
||||
use \manager\Authentification;
|
||||
|
||||
|
||||
var_dump($_SESSION['AUTH']);
|
||||
var_dump( authLevel() );
|
||||
var_dump( Authentification::auth() );
|
||||
|
||||
?>
|
||||
|
|
Loading…
Reference in New Issue