projet-php/managers/Authentification.class.php

88 lines
3.0 KiB
PHP
Executable File

<?php
class Authentification{
private $users;
public function __construct(){
$this->users = json_decode(file_get_contents($GLOBALS['managers_dir'].DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'users.json'),true);
}
/**
* méthode d'authentification, utilise param['identifiant'] et param['mdp'] et les comparent à
* nos utilisateurs enregistrés puis créer une session securisée par token
* @param array $param contiens les infomations de connection
* @return json json contenant le résultat de l'authentification (true si authentification correcte, sinon non)
*/
public function authentification($user,$mdp){
foreach($this->users as $utilisateur=>$infos){
if($utilisateur == $user and $infos['password'] == $mdp){
$this->createSecureSession($user,$infos['role']);
return true;
}
}
return false;
}
/**
* déconnecte l'utilisateur en détruisant la session et le cookie
* @return json renvoie true, il n'y aucune raison que ça foire
*/
public function deconnection(){
$this->destroySecureSession();
Response::quickResponse(200,json_encode(['result' => true]));
}
/**
* créer une session sécurisé , protégé du vol de session par identification de l'utilisateur par navigateur/ip/cookie
* @param String $user nom d'utilisateur
* @param String $role role de l'utilisateur (0=administrateur, 1= prof, 2=scolarité,3=élève)
* @return void
*/
private function createSecureSession($user,$role){
$id = uniqid();
$_SESSION['id'] = $id;
$_SESSION['token'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$id);
session_regenerate_id();
$_SESSION['user'] = $user;
$_SESSION['role'] = $role;
}
/**
* Détruit une session
* @return void
*/
private function destroySecureSession(){
session_destroy();
setcookie('token',time()-1);
}
/**
* Vérifie qu'un utilisateur donné a les droits demandés (passés en paramètres)
* @param int $role role minimum
* @param boolean $strict si strict vaut true, seul les utilisateurs avec le role précis seront acceptés, sinon tout les utilisateurs
* avec un role superieur le seront
* @return boolean
*/
public static function checkUser($role, $strict=false){
if(isset($_SESSION['token'])){
foreach($_SESSION['role'] as $roleUser){
if(($strict and $roleUser == $role) or (!$strict and $roleUser<= $role)){
if($_SESSION['token'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SESSION['id'])){
session_regenerate_id();
return true;
};
}
}
}
return false;
}
public static function getCurrentUser(){
return $_SESSION['user'];
}
}
?>