Gestion des droits pour l'API et les modules

This commit is contained in:
xdrm-brackets 2016-04-12 16:47:06 +02:00
parent f00cdc67f7
commit 5871cf1591
4 changed files with 71 additions and 13 deletions

View File

@ -2,11 +2,18 @@
"users": {
"login": {
"description": "Test de connexion avec un login (identifiant ou adresse mail) et un mot de passe.",
"description": "Connexion avec un login (identifiant ou adresse mail) et un mot de passe.",
"permissions": [],
"parameters": {
"login": { "description": "Identifiant ou adresse mail", "type": "varchar(255)" },
"password": { "description": "Mot de passe", "type":"text" }
}
},
"logout": {
"description": "Deconnexion",
"permissions": [],
"parameters": {}
}
},
@ -14,6 +21,7 @@
"call_log": {
"unserialize": {
"description": "Recupere le contenu d'un fichier XML de journal d'appel.",
"permissions": ["admin"],
"parameters": {
"filecontent": { "description": "Contenu du fichier XML", "type": "text" }
}
@ -24,11 +32,13 @@
"network_data": {
"description": "Renvoie un jeu de donnees fictif pour un graphique de type #network.",
"permissions": ["admin"],
"parameters": {}
},
"network_render": {
"description": "Renvoie le contenu du svg representant un graphique de type #network avec les donnees recues.",
"permissions": ["admin"],
"parameters": {
"dataset": { "description": "Dataset au bon format pour un graphique de type #network." }
}
@ -40,6 +50,7 @@
"remove": {
"description": "Suppression d'un token d'id donne.",
"permissions": ["admin"],
"parameters": {
"token_id": { "description": "UID du token a supprimer", "type": "id" }
}
@ -48,6 +59,7 @@
"generate": {
"description": "Creation d'un token de nom et de duree donnee",
"permissions": ["admin"],
"parameters": {
"name": { "description": "Nom attribue au token", "type": "varchar(50)" },
"duration": { "description": "Duree du token en nombre de jours", "type": "numeric" }

View File

@ -64,6 +64,8 @@
// Token inexistant ou faux
const TokenError = 15;
const PermissionError = 16;
/* EXPLICITE UN CODE D'ERREUR
*
@ -95,6 +97,7 @@
case self::PDOConnection: return "La connexion avec la base de donnees a echoue"; break;
case self::TokenError: return "Le token de connection est absent ou errone"; break;
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action"; break;
// default: return "Erreur inconnue..."; break;
}

View File

@ -3,16 +3,6 @@
namespace manager;
use \manager\Database;
// FORMAT:
//
// path: "nomModule/nomMethode"
// data1: {donnee1}
// data2: {donnee2}
// ...
//
//
//
//
class ModuleRequest{
@ -80,14 +70,23 @@
if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution
return false;
/* [3] Verification des parametres (si @type est defini)
/* [3] Verification des droits
=========================================================*/
if( !$this->checkPermission() ){ // Si on a pas les droits
$this->error = ManagerError::PermissionError;
return false;
}
/* [4] Verification des parametres (si @type est defini)
=========================================================*/
if( !$this->checkParams($params) ){ // Verification de tous les types
$this->error = ManagerError::ParamError;
return false;
}
/* [4] Construction de l'objet
/* [5] Construction de l'objet
=========================================================*/
$this->params = $params;
$this->error = ManagerError::Success;
@ -265,6 +264,37 @@
/* RETOURNE SI ON A LA PERMISSION D'EXECUTER CETTE METHODE
*
* @return permission<bool> Retourne si on a les droits ou pas pour executer cette methode
*
*/
private function checkPermission(){
// 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
$permissions = $method['permissions'];
// 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
foreach($permissions as $permission)
if( permission($permission) ) return true;
// On retourne FAUX si aucun droit n'a ete trouve
return false;
}
/* VERIFICATION DU TYPE DES PARAMETRES ENVOYES
*
* @params<Array> Tableau associatif contenant les parametres

View File

@ -42,7 +42,20 @@
);
}
/* DECONNEXION D'UN UTILISATEUR
*
*/
public static function logout(){
$_SESSION['userid'] = null;
$_SESSION['username'] = null;
$_SESSION['permission'] = array();
}
// [x] "login",
// [x] "logout",
// [ ] "getById",
// [ ] "getAll",