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": {
|
||||
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
|
||||
"permissions": ["admin"],
|
||||
"permissions": [],
|
||||
"parameters": {}
|
||||
},
|
||||
|
||||
|
|
|
@ -33,11 +33,15 @@
|
|||
|
||||
// Si les parametres de connection, on essaie de connecter
|
||||
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();
|
||||
|
||||
// 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';
|
||||
|
||||
// Si on n'a pas les bonnes donnees
|
||||
|
|
|
@ -29,11 +29,12 @@
|
|||
*
|
||||
* @path<String> Chemin de delegation ("module/methode")
|
||||
* @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
|
||||
*
|
||||
*/
|
||||
public function __construct($path=null, $params=null){
|
||||
public function __construct($path=null, $params=null, $token=null){
|
||||
// Si pas parametre manquant, on quitte
|
||||
if( $path == null ){
|
||||
$this->error = ManagerError::MissingPath;
|
||||
|
@ -73,7 +74,7 @@
|
|||
|
||||
/* [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;
|
||||
return false;
|
||||
}
|
||||
|
@ -183,15 +184,6 @@
|
|||
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
|
||||
=========================================================*/
|
||||
|
@ -205,17 +197,17 @@
|
|||
// On retire le @path de @params
|
||||
unset($params['path']);
|
||||
|
||||
|
||||
/* [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
|
||||
*
|
||||
* @path<String> String correspondant au chemin de delegation ("module/methode")
|
||||
|
@ -268,27 +260,58 @@
|
|||
|
||||
/* 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(){
|
||||
private function checkPermission($token=null){
|
||||
/* [1] On recupere les informations utiles
|
||||
=========================================================*/
|
||||
// On recupere le nom de la methode
|
||||
$method = $this->modules[$this->path['module']][$this->path['method']];
|
||||
|
||||
// Si aucune permission n'est definie
|
||||
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'];
|
||||
|
||||
// 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;
|
||||
|
||||
// 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)
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
*
|
||||
* @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){
|
||||
|
@ -92,16 +92,21 @@
|
|||
|
||||
/* [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
|
||||
WHERE CURDATE() <= expires
|
||||
AND 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