Suppression des non-administrateurs de : 1. BDD 2. Modules 3. Repo 4. Vue 5. Javascript

This commit is contained in:
xdrm-brackets 2016-10-24 15:34:18 +02:00
parent 442ed330ae
commit dc30fbfcca
13 changed files with 57 additions and 114 deletions

View File

@ -52,10 +52,10 @@
/* [3] Gestion des droits des utilisateurs
=========================================================*/
/* (1) Retourne si l'utilisateur est connecte ou non */
function connected(){ return isset($_SESSION['permission']) && count($_SESSION['permission']) > 0; }
function connected(){ return isset($_SESSION['permission']) && $_SESSION['permission']; }
/* (2) Retourne si l'utilisateur a le status en question */
function permission($type){ return connected() && in_array($type, $_SESSION['permission']); }
function permission(){ return connected() && $_SESSION['permission']; }
?>

View File

@ -400,7 +400,8 @@
/* [3] Gestion si aucun token, avec utilisateur connecté
=========================================================*/
}else if( isset($_SESSION['permission']) )
$local_permissions = $_SESSION['permission'];
$local_permissions = $_SESSION['permission'] ? ['admin'] : [];
// Si ni token, ni SESSION, erreur
else{
$this->error = ManagerError::PermissionError;
@ -414,7 +415,7 @@
$permissions = $method['permissions'];
/* (2) Si aucune permission n'est definie, on laisse l'acces */
if( count($permissions) == 0 ) return true;
if( !$permissions == 0 ) return true;
/* (3) On verifie qu'il y a au moins une permission ok */
foreach($permissions as $permission)

View File

@ -33,11 +33,10 @@
=========================================================*/
$_SESSION['userid'] = $user['id_user'];
$_SESSION['username'] = $user['login'];
$_SESSION['permission'] = explode( ',', str_replace(' ', '', $user['permission']) );
$_SESSION['permission'] = true;
/* [4] Retour de l'id user
=========================================================*/
return [
'ModuleError' => ManagerError::Success,
'id_user' => $user['id_user']
@ -77,11 +76,6 @@
// Si aucun utilisateur n'est trouve
if( count($user_data) == 0 ) return ['ModuleError' => ManagerError::ModuleError];
/* [2] On met les permissions au bon format (string -> array)
=========================================================*/
$user_data[0]['permission'] = explode( ',', str_replace(' ', '', $user_data[0]['permission']) );
/* [3] Gestion du retour
=========================================================*/
return [
@ -107,11 +101,6 @@
// Si aucun utilisateur n'est trouve
if( $users_data === false ) return ['ModuleError' => ManagerError::ModuleError];
/* [2] On met les permissions au bon format (string -> array)
=========================================================*/
foreach($users_data as $i=>$user)
$users_data[$i]['permission'] = explode( ',', str_replace(' ', '', $user['permission']) );
/* [3] Gestion du retour
=========================================================*/
return [
@ -129,8 +118,6 @@
* @login<String> Login (identifiant) de l'utilisateur
* @password<String> Password de l'utilisateur
* @mail<String> Adresse mail de l'utilisateur
* @reference<int> Reference vers une Personne (sinon NULL)
* @permissions<String> Liste des permissions de l'utilisateur
*
* @return id_user<int> Renvoie l'id de l'utilisateur cree
*
@ -141,13 +128,11 @@
/* [0] Verification et formattage des INPUT
=========================================================*/
$password = sessionManager::sha1($password);
$reference = (is_numeric($reference)) ? (int) $reference : null;
$permission = ($permission=='admin') ? 'admin' : 'subject';
/* [1] Creation de l'utilisateur
=========================================================*/
$create = new Repo('user/create', [$login, $password, $mail, $reference, $permission]);
$create = new Repo('user/create', [$login, $password, $mail]);
$created_id = $create->answer();
// Si erreur de creation, on retourne une erreur

View File

@ -32,7 +32,7 @@
/* [1] On verifie son login/password dans la BDD
=========================================================*/
$check = Database::getPDO()->prepare("SELECT id_user, login, permission
$check = Database::getPDO()->prepare("SELECT id_user, login
FROM users
WHERE ( login = :username OR mail = :mail ) AND password = :password");
$check->execute(array(
@ -62,20 +62,16 @@
* @login<String> Login (identifiant) de l'utilisateur
* @password<String> Password de l'utilisateur
* @mail<String> Adresse mail de l'utilisateur
* @reference<int> Reference vers une Personne (sinon NULL)
* @permissions<Array> Liste des permissions de l'utilisateur
*
* @return id_user<int> Renvoie l'id de l'utilisateur cree ou FALSE si erreur
*
*/
public static function create($login, $password, $mail, $reference, $permission){
public static function create($login, $password, $mail){
/* [0] Verification et formattage des INPUT
=========================================================*/
$checkInput = Checker::run('hash', $password);
$checkInput = $checkInput && Checker::run('varchar(3, 30)', $login);
$checkInput = $checkInput && Checker::run('mail', $mail);
$checkInput = $checkInput && ( Checker::run('id', $reference) || is_null($reference) );
$checkInput = $checkInput && in_array($permission, ['admin', 'subject']);
// Si erreur en entree, on retourne FAUX
if( !$checkInput ) return false;
@ -86,12 +82,10 @@
$checkUnique = Database::getPDO()->prepare("SELECT id_user
FROM users
WHERE login = :login
OR mail = :mail
OR ( reference = :reference AND reference is not NULL )");
OR mail = :mail ");
$checkUnique->execute(array(
':login' => $login,
':mail' => $mail,
':reference' => $reference
':mail' => $mail
));
// Si un utilisateur a le meme LOGIN/MAIL ou REFERENCE qu'un autre, on retourne une erreur
@ -100,48 +94,25 @@
/* [2] Creation de l'utilisateur
=========================================================*/
/* (1) Si reference NULL */
if( $reference == null ){
$create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail, reference, permission)
VALUES(DEFAULT, :login, :password, :mail, NULL, :permission)");
$create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail)
VALUES(DEFAULT, :login, :password, :mail)");
$create->execute(array(
':login' => $login,
':password' => $password,
':mail' => $mail,
':permission' => $permission
':mail' => $mail
));
/* (2) Si reference est defini */
}else{
$create = Database::getPDO()->prepare("INSERT INTO users(id_user, login, password, mail, reference, permission)
VALUES(DEFAULT, :login, :password, :mail, :reference, :permission)");
$create->execute(array(
':login' => $login,
':password' => $password,
':mail' => $mail,
':reference' => (int) $reference,
':permission' => $permission
));
}
/* [3] Verification de la creation + recuperation id
=========================================================*/
$checkCreate = Database::getPDO()->prepare("SELECT id_user
FROM users
WHERE login = :login
AND password = :password
AND mail = :mail
AND ( reference = :reference OR reference is NULL )
AND permission = :permission");
AND mail = :mail");
$checkCreate->execute(array(
':login' => $login,
':password' => $password,
':mail' => $mail,
':reference' => (int) $reference,
':permission' => $permission
':mail' => $mail
));
// On recupere l'id de l'utilisateur

View File

@ -6,7 +6,7 @@
class lightdb{
// REPERTOIRE RACINE DE TOUTES LES BDD
public static function default_root(){ return __BUILD__.'/lightdb/storage'; }
public static function default_root(){ return __BUILD__.'/lightdb/storage/'; }
// ATTRIBUTS
private $root;

View File

@ -94,17 +94,15 @@
"create": {
"description": "Creation d'un nouvel utilisateur.",
"description": "Creation d'un nouvel administrateur.",
"permissions": ["admin"],
"parameters": {
"login": { "description": "Login de l'utilisateur, 30 caracteres maximum.", "type": "varchar(3,30)" },
"password": { "description": "Mot de passe de l'utilisateur.", "type": "text" },
"mail": { "description": "Adresse mail de l'utilisateur.", "type": "mail" },
"reference": { "description": "UID d'une personne d'un sondage, peut etre vide.", "type": "text" },
"permission": { "description": "Permissions de l'utilisateur : 'admin' ou 'subject'", "type": "varchar(5,7)" }
"login": { "description": "Login de l'administrateur, 30 caracteres maximum.", "type": "varchar(3,30)" },
"password": { "description": "Mot de passe de l'administrateur.", "type": "text" },
"mail": { "description": "Adresse mail de l'administrateur.", "type": "mail" }
},
"output": {
"id_user": { "description": "Identifiant de l'utilisateur créé", "type": "id" }
"id_user": { "description": "Identifiant de l'administrateur créé", "type": "id" }
}
},

View File

@ -1,12 +1,12 @@
{
"local" : {
"host" : "http://socioview",
"host" : "http://nxtic/",
"root" : "/"
},
"remote" : {
"host" : "https://socioview.xdrm.io",
"host" : "https://nxtic.xdrm.io/",
"root" : "/"
}

View File

@ -11,7 +11,6 @@
use \manager\MenuManager;
/*******************************************/
/* DEBUGGER */
/*******************************************/
@ -27,13 +26,13 @@
/* (1) Valeurs par defaut */
if( !isset($_SESSION['userid']) ) $_SESSION['userid'] = null;
if( !isset($_SESSION['username']) ) $_SESSION['username'] = null;
if( !isset($_SESSION['permission']) ) $_SESSION['permission'] = [];
if( !isset($_SESSION['permission']) ) $_SESSION['permission'] = false;
/* (2) Gestion de la connection */
$login_vars = isset($_POST['login-sub']);
$login_vars = $login_vars && isset($_POST['login']) && Checker::run('varchar(3,50)', $_POST['login']);
$login_vars = $login_vars && isset($_POST['password']) && Checker::run('text', $_POST['password']);
$login_vars = $login_vars && isset($_POST['login']);
$login_vars = $login_vars && isset($_POST['password']);
// Status de login
$_SESSION['login_status'] = 'no';

View File

@ -147,7 +147,7 @@ var navMenu = function(section){
var refresher = function(){
navSubMenu();
navSubMenu(pageManager.vars[0]);
};
@ -159,7 +159,7 @@ DOM = {
HEADER: $('body > #WRAPPER > #HEADER'),
MENUSIDE: $('body > #WRAPPER > #MENU-SIDE'),
CONTAINER: $('body > #WRAPPER > #CONTAINER')
};
};
// On cree une instance de l'api
api = new APIClass('/api/');

View File

@ -1,8 +1,8 @@
var DOM,pageManager,api,Notification,navSubMenu=function(a){var c=$("#MENU-SIDE > span[data-link="+pageManager.page+'] + div.sub > span[data-sublink="'+pageManager.vars[0]+'"]'),b=null,b=a instanceof Element?a:null,b="string"==typeof a?$("#MENU-SIDE > span[data-link="+pageManager.page+'] + div.sub > span[data-sublink="'+a+'"]'):b,b=null==b?$("#MENU-SIDE > span[data-link="+pageManager.page+"] + div.sub > span[data-sublink]"):b;if(null==b)return!1;null!=c&&c.remClass("active");c=$$("#CONTAINER > section[data-sublink].active");
for(a=0;a<c.length;a++)c[a].remClass("active");if(null!=b)for(b.addClass("active"),c=$$('#CONTAINER > section[data-sublink="'+b.getData("sublink")+'"]'),a=0;a<c.length;a++)c[a].addClass("active");if(!b.getData("sublink"))return!1;a=pageManager.vars[0]!=b.getData("sublink");pageManager.vars[0]=b.getData("sublink");a&&pageManager.updateURL()},navMenu=function(a){var c=$('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.page+'"]'),b=null,b=a instanceof Element?a:null,b=(b="string"==typeof a?$('#WRAPPER > #MENU-SIDE > span[data-link="'+
a+'"]'):b)||$('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.pagelist[0]+'"]');if(null==b)return!1;c&&c.remClass("active");b&&b.addClass("active");b.getData("link")&&(DOM.HEADER.addClass("loading"),a=function(){1<=pageManager.vars.length&&null!=$('#CONTAINER > section[data-sublink="'+pageManager.vars[0]+'"]')?navSubMenu(pageManager.vars[0]):navSubMenu(null);var a=$("#MENU-SIDE > span[data-link="+pageManager.page+"] + div.sub");null!=a&&a.addEventListener("click",function(a){for(a=a.target;a!=
document.body&&!a.getData("sublink");)a=a.parentNode;a.getData("sublink")&&navSubMenu(a)},!1);DOM.HEADER.remClass("loading")},pageManager.page!=b.getData("link")&&pageManager.setPage(b.getData("link")),pageManager.activeXHR?pageManager.activeXHR.addEventListener("loadend",a,!1):a.call())},refresher=function(){navSubMenu()};DOM={WRAPPER:$("body > #WRAPPER"),HEADER:$("body > #WRAPPER > #HEADER"),MENUSIDE:$("body > #WRAPPER > #MENU-SIDE"),CONTAINER:$("body > #WRAPPER > #CONTAINER")};api=new APIClass("/api/");
Notification=new NotificationClass($("#notification-container"));Notification.defaultTimeout=4E3;
document.body&&!a.getData("sublink");)a=a.parentNode;a.getData("sublink")&&navSubMenu(a)},!1);DOM.HEADER.remClass("loading")},pageManager.page!=b.getData("link")&&pageManager.setPage(b.getData("link")),pageManager.activeXHR?pageManager.activeXHR.addEventListener("loadend",a,!1):a.call())},refresher=function(){navSubMenu(pageManager.vars[0])};DOM={WRAPPER:$("body > #WRAPPER"),HEADER:$("body > #WRAPPER > #HEADER"),MENUSIDE:$("body > #WRAPPER > #MENU-SIDE"),CONTAINER:$("body > #WRAPPER > #CONTAINER")};
api=new APIClass("/api/");Notification=new NotificationClass($("#notification-container"));Notification.defaultTimeout=4E3;
Notification.errorCodes={"-1":"Erreur de r\u00e9seau, veuillez recharger la page et r\u00e9essayer",0:"Erreur interne",1:"Erreur interne",2:"Erreur interne",3:"Le fichier est introuvable",4:"Erreur interne",5:"Erreur interne",6:"Erreur interne",7:"Erreur interne",8:"Erreur interne",9:"Certaines donn\u00e9es sont manquantes",10:"Erreur interne",11:"Erreur interne",12:"Erreur interne",13:"Erreur interne",14:"Erreur interne",15:"Erreur interne",16:"Vous n'avez pas la permission d'effectuer cette action",
17:"Le t\u00e9l\u00e9chargement a \u00e9chou\u00e9",18:"Le fichier est invalide (format incorrect)"};lsi.setStorage(localStorage);DOM.MENUSIDE.addEventListener("click",function(a){for(a=a.target;a!=document.body&&!a.getData("link");)a=a.parentNode;a.getData("link")&&navMenu(a.getData("link"))},!1);function reload(){pageManager.refresh()}var LOGIN={show:document.getElementById("user-data"),hide:document.getElementById("login-close"),page:document.getElementById("LOGIN")};
LOGIN.show.addEventListener("click",function(a){LOGIN.page.className="active"},!1);LOGIN.hide.addEventListener("click",function(a){LOGIN.page.className=""},!1);api.send({path:"download/menu"},function(a){if(0===a.ModuleError){pagelist=[];for(var c=0;c<a.menu.length;c++)pagelist.push(a.menu[c].attributes["data-link"]);pageManager=new pageManagerClass;pageManager.setPage(null,"/view",DOM.CONTAINER,pagelist,null);pageManager.refresh(refresher);navMenu(pageManager.page)}});

View File

@ -1,5 +1,5 @@
var TOKEN={add:{toggle:document.getElementById("add-token"),panel:$("[data-sublink='tokens'] div[data-add]"),state:!0,submit:$("[data-sublink='tokens'] div[data-add] #add-token-submit")},remove:{buttons:$$(".remove-token")}},tokenDeflater=new FormDeflater(TOKEN.add.panel,["input"],["id"]);TOKEN.add.toggle.addEventListener("click",function(a){TOKEN.add.state?TOKEN.add.panel.addClass("active"):TOKEN.add.panel.remClass("active");TOKEN.add.state=!TOKEN.add.state},!1);
TOKEN.add.submit.addEventListener("click",function(a){a=tokenDeflater.deflate();api.send({path:"token/generate",name:a["add-name"],duration:a["add-duration"]},function(a){0==a.ModuleError&&reload()})},!1);for(var i=0;i<TOKEN.remove.buttons.length;i++)TOKEN.remove.buttons[i].addEventListener("click",function(a){a=a.target.parentNode.getData("id");0==a?console.warn("id du token non trouvee"):api.send({path:"token/remove",token_id:a},function(a){0==a.ModuleError&&reload()})},!1);
var USERS={add:{toggle:document.getElementById("add-user"),panel:$("[data-sublink='users'] div[data-add]"),state:!0,submit:$("[data-sublink='users'] div[data-add] #add-user-submit")},remove:{buttons:$$(".remove-user")}},userDefalter=new FormDeflater(USERS.add.panel,["input"],["id"]);USERS.add.toggle.addEventListener("click",function(a){USERS.add.state?USERS.add.panel.addClass("active"):USERS.add.panel.remClass("active");USERS.add.state=!USERS.add.state},!1);
USERS.add.submit.addEventListener("click",function(a){a=userDefalter.deflate();a["add-password"]==a["add-password2"]&&api.send({path:"user/create",login:a["add-login"],password:a["add-password"],mail:a["add-mail"],reference:a["add-reference"],permission:a["add-admin"]},function(a){console.log(a);0==a.ModuleError&&reload()})},!1);
USERS.add.submit.addEventListener("click",function(a){a=userDefalter.deflate();a["add-password"]==a["add-password2"]&&api.send({path:"user/create",login:a["add-login"],password:a["add-password"],mail:a["add-mail"]},function(a){console.log(a);0==a.ModuleError&&reload()})},!1);
for(i=0;i<USERS.remove.buttons.length;i++)USERS.remove.buttons[i].addEventListener("click",function(a){a=a.target.parentNode.getData("id");0==a?console.warn("id de l'utilisateur non trouvee"):api.send({path:"user/remove",id_user:a},function(a){0==a.ModuleError&&reload()})},!1);

View File

@ -131,9 +131,7 @@ var userDefalter = new FormDeflater(USERS.add.panel, ['input'], ['id']);
'path': 'user/create',
'login': form['add-login'],
'password': form['add-password'],
'mail': form['add-mail'],
'reference': form['add-reference'],
'permission': form['add-admin']
'mail': form['add-mail']
};
// On lance la requete

View File

@ -78,45 +78,41 @@ if( permission('admin') ){
</section>
<?php
/* [2] Gestion des utilisateurs
/* [2] Gestion des administrateurs
=========================================================*/
// permission: admin
//=======================================================//
/* (1) On recupere la liste des utilisateurs */
/* (1) On recupere la liste des administrateurs */
$req_users = new ModuleRequest('user/getAll');
$answer_users = $req_users->dispatch();
// Si erreur de requete
if( $answer_users->error != ManagerError::Success )
var_dump( ManagerError::explicit($answer_users->error) );
// On recupere la liste des utilisateurs
// On recupere la liste des administrateurs
$users = $answer_users->get('users');
?><section data-sublink='users'>
<h6 class='center'>Gestion des utilisateurs</h6><br>
<h6 class='center'>Gestion des administrateurs</h6><br>
<!-- [1] Panel d'ajout/suppression d'utilisateur -->
<section data-panel-list>
<!-- Header -->
<div data-header>
<span>Gestion des utilisateurs</span>
<span>Gestion des administrateurs</span>
<button id='add-user'>Ajouter un utilisateur</button>
</div>
<!-- Description des utilisateurs et des permissions -->
<div data-description>Liste des utilisateurs de la plateforme. Un <i>administrateur</i> peut tout faire. Un <i>sujet</i> peut compléter ses données et les consulter.</div>
<!-- Description des administrateurs et des permissions -->
<div data-description>Liste des administrateurs de la plateforme exhaustive.</div>
<!-- Creation d'un nouvel element (cache) -->
<div data-add>
<span class='label'>Identifiant</span><input type='text' id='add-login'><br>
<span class='label'>Adresse mail</span><input type='email' id='add-mail'><br>
<span class='label'>Mot de passe</span><input type='password' id='add-password'><br>
<span class='label'>Vérification du mot de passe</span><input type='password' id='add-password2'><br>
<span class='label'>Droits</span>
<input type='radio' name='add-permissions' value='subject' id='add-subject' checked='true'><label for='add-subject'>Sujet</label> &nbsp;&nbsp;
<input type='radio' name='add-permissions' value='admin' id='add-admin'><label for='add-admin'>Administrateur</label><br>
<span class='label'>Identifiant d'étude (optionnel)</span><input type='text' id='add-reference'><br>
<input type='submit' value='Créer un utilisateur' id='add-user-submit'>
<input type='submit' value='Créer un administrateur' id='add-user-submit'>
</div>
<!-- Conteneur de la liste des elements -->
@ -129,12 +125,7 @@ if( permission('admin') ){
if( $user['login'] == $_SESSION['username'] ) continue;
echo "<li data-element data-id='".$user['id_user']."'>";
// Si user actif
if( in_array('admin', $user['permission']) )
echo "<div class='active' data-user><span>Administrateur</span></div>";
else
echo "<div data-user><span>Sujet</span></div>";
echo "<div>";
echo "<span data-prefix='Identifiant'>".$user['login']."</span>";