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

View File

@ -64,6 +64,8 @@
// Token inexistant ou faux // Token inexistant ou faux
const TokenError = 15; const TokenError = 15;
const PermissionError = 16;
/* EXPLICITE UN CODE D'ERREUR /* 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::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::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; // default: return "Erreur inconnue..."; break;
} }

View File

@ -3,16 +3,6 @@
namespace manager; namespace manager;
use \manager\Database; use \manager\Database;
// FORMAT:
//
// path: "nomModule/nomMethode"
// data1: {donnee1}
// data2: {donnee2}
// ...
//
//
//
//
class ModuleRequest{ class ModuleRequest{
@ -80,14 +70,23 @@
if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution if( !$this->checkPath($path) ) // Verification de la coherence du chemin + attribution
return false; 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 if( !$this->checkParams($params) ){ // Verification de tous les types
$this->error = ManagerError::ParamError; $this->error = ManagerError::ParamError;
return false; return false;
} }
/* [4] Construction de l'objet /* [5] Construction de l'objet
=========================================================*/ =========================================================*/
$this->params = $params; $this->params = $params;
$this->error = ManagerError::Success; $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 /* VERIFICATION DU TYPE DES PARAMETRES ENVOYES
* *
* @params<Array> Tableau associatif contenant les parametres * @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] "login",
// [x] "logout",
// [ ] "getById", // [ ] "getById",
// [ ] "getAll", // [ ] "getAll",