Gestion des permissions des tokens
Gestion des permissions associées aux tokens au lieu d'avoir besoin d'une connexion utilisateur
This commit is contained in:
parent
c7d9607603
commit
08a2ad3602
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
"network_data": {
|
"network_data": {
|
||||||
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
||||||
"permissions": ["admin"],
|
"permissions": [],
|
||||||
"parameters": {}
|
"parameters": {}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -33,11 +33,15 @@
|
||||||
|
|
||||||
// Si les parametres de connection, on essaie de connecter
|
// Si les parametres de connection, on essaie de connecter
|
||||||
if( $login_vars ){
|
if( $login_vars ){
|
||||||
$login = new ModuleRequest('users/login', array('login' => $login, 'password' => $password));
|
$login = new ModuleRequest('users/login', array(
|
||||||
|
'login' => $_POST['login'],
|
||||||
|
'password' => $_POST['password']
|
||||||
|
));
|
||||||
|
|
||||||
$login_ans = $login->dispatch();
|
$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->ModuleError == ManagerError::Success )
|
if( $login_ans->error == ManagerError::Success )
|
||||||
$_SESSION['login_status'] = 'logged';
|
$_SESSION['login_status'] = 'logged';
|
||||||
|
|
||||||
// Si on n'a pas les bonnes donnees
|
// Si on n'a pas les bonnes donnees
|
||||||
|
|
|
@ -29,11 +29,12 @@
|
||||||
*
|
*
|
||||||
* @path<String> Chemin de delegation ("module/methode")
|
* @path<String> Chemin de delegation ("module/methode")
|
||||||
* @param<Array> Tableau associatif contenant les parametres utiles au traitement
|
* @param<Array> Tableau associatif contenant les parametres utiles au traitement
|
||||||
|
* @token<String> Token d'acces a l'api (OPTIONNEL)
|
||||||
*
|
*
|
||||||
* @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){
|
public function __construct($path=null, $params=null, $token=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;
|
||||||
|
@ -73,7 +74,7 @@
|
||||||
|
|
||||||
/* [3] Verification des droits
|
/* [3] Verification des droits
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( !$this->checkPermission() ){ // Si on a pas les droits
|
if( !$this->checkPermission($token) ){ // Si on a pas les droits
|
||||||
$this->error = ManagerError::PermissionError;
|
$this->error = ManagerError::PermissionError;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -183,15 +184,6 @@
|
||||||
return $tmp;
|
return $tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (2) Si le token n'est pas dans la BDD */
|
|
||||||
$checkToken = new Repo('token/check', array($_SERVER['PHP_AUTH_DIGEST']) );
|
|
||||||
$valid_token = $checkToken->answer();
|
|
||||||
|
|
||||||
if( !$valid_token ){
|
|
||||||
$tmp = new ModuleRequest();
|
|
||||||
$tmp->error = ManagerError::TokenError;
|
|
||||||
return $tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* [1] On verifie que le @path est renseigne
|
/* [1] On verifie que le @path est renseigne
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
@ -205,17 +197,17 @@
|
||||||
// On retire le @path de @params
|
// On retire le @path de @params
|
||||||
unset($params['path']);
|
unset($params['path']);
|
||||||
|
|
||||||
|
|
||||||
/* [3] On retourne une instance de <ModuleRequest>
|
/* [3] On retourne une instance de <ModuleRequest>
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return new ModuleRequest($post['path'], $params);
|
// On cree notre requete avec le token
|
||||||
|
return new ModuleRequest($post['path'], $params, $_SERVER['PHP_AUTH_DIGEST']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE
|
/* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE
|
||||||
*
|
*
|
||||||
* @path<String> String correspondant au chemin de delegation ("module/methode")
|
* @path<String> String correspondant au chemin de delegation ("module/methode")
|
||||||
|
@ -268,27 +260,58 @@
|
||||||
|
|
||||||
/* 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(){
|
private function checkPermission($token=null){
|
||||||
|
/* [1] On recupere les informations utiles
|
||||||
|
=========================================================*/
|
||||||
// On recupere le nom de la methode
|
// On recupere le nom de la methode
|
||||||
$method = $this->modules[$this->path['module']][$this->path['method']];
|
$method = $this->modules[$this->path['module']][$this->path['method']];
|
||||||
|
|
||||||
// Si aucune permission n'est definie
|
// Si aucune permission n'est definie
|
||||||
if( !isset($method['permissions']) ) return true;
|
if( !isset($method['permissions']) ) return true;
|
||||||
|
|
||||||
// On recupere les permissions
|
|
||||||
|
/* [2] Gestion si un @token est defini
|
||||||
|
=========================================================*/
|
||||||
|
if( Database::check('sha1', $token) ){
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) On verifie que le token est valide */
|
||||||
|
$checkToken = new Repo('token/check', array($token) );
|
||||||
|
$token_permissions = $checkToken->answer();
|
||||||
|
|
||||||
|
// Si le token est invalide, on retourne FAUX
|
||||||
|
if( $token_permissions === false ) return false;
|
||||||
|
|
||||||
|
$local_permissions = $token_permissions;
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Gestion si aucun token, avec utilisateu connecte
|
||||||
|
=========================================================*/
|
||||||
|
}else
|
||||||
|
$local_permissions = $_SESSION['permission'];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] Verification des droits parmi les permissions donnees
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) On recupere la liste des permissions possibles */
|
||||||
$permissions = $method['permissions'];
|
$permissions = $method['permissions'];
|
||||||
|
|
||||||
// Si aucune permission n'est definie, on laisse l'acces
|
/* (2) Si aucune permission n'est definie, on laisse l'acces */
|
||||||
if( count($permissions) == 0 ) return true;
|
if( count($permissions) == 0 ) return true;
|
||||||
|
|
||||||
// On verifie qu'il y a au moins une permission ok
|
/* (3) On verifie qu'il y a au moins une permission ok */
|
||||||
foreach($permissions as $permission)
|
foreach($permissions as $permission)
|
||||||
if( permission($permission) ) return true;
|
if( in_array($permission, $local_permissions) ) return true;
|
||||||
|
|
||||||
// On retourne FAUX si aucun droit n'a ete trouve
|
|
||||||
|
/* [5] On retourne FAUX si aucun droit n'a ete trouve
|
||||||
|
=========================================================*/
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@
|
||||||
*
|
*
|
||||||
* @token<String> Token en question
|
* @token<String> Token en question
|
||||||
*
|
*
|
||||||
* @return valid<bool> Retourne si VRAI ou FAUX le token est valid
|
* @return permissions<Array> Retourne les permissions (droits) du token s'il est valide sinon retourne FAUX
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function check($token){
|
public static function check($token){
|
||||||
|
@ -92,16 +92,21 @@
|
||||||
|
|
||||||
/* [2] Verification dans la base de donnees
|
/* [2] Verification dans la base de donnees
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$check = Database::getPDO()->prepare("SELECT id_token
|
$check = Database::getPDO()->prepare("SELECT id_token, permission
|
||||||
FROM api_token
|
FROM api_token
|
||||||
WHERE CURDATE() <= expires
|
WHERE CURDATE() <= expires
|
||||||
AND token = :token");
|
AND token = :token");
|
||||||
$check->execute(array( ':token' => $token ));
|
$check->execute(array( ':token' => $token ));
|
||||||
|
|
||||||
|
$token_info = $check->fetch();
|
||||||
|
|
||||||
/* [3] On retourne le resultat
|
// Si le token est inactif, on retourne FALSE
|
||||||
|
if( $token_info === false ) return false;
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] On retourne le resultat (les permissions du token)
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
return $check->fetch() !== false;
|
return explode( ',', str_replace(' ', '', $token_info['permission']) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue