New file |
0,0 → 1,119 |
<?php |
/** |
* Classe de controle d'accès utilisant l'authentification http pour bloquer ou autoriser l'accès. |
* Elle offre des méthodes permettant de réserver l'accès à une section aux admins ou bien aux utilisateurs identifiés |
* |
* @category php 5.2 |
* @package del |
* @author Aurélien Peronnet <aurelien@tela-botanica.org> |
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org) |
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL |
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL |
* @version $Id$ |
*/ |
class ControleAcces { |
|
private $conteneur; |
private $gestionBdd; |
|
public function __construct($conteneur) { |
$this->conteneur = $conteneur; |
$this->gestionBdd = $conteneur->getGestionBdd(); |
} |
|
public function demanderAuthentificationAdmin() { |
if(!$this->etreAdminAutorise()) { |
$this->authentifierAdmin(); |
} |
} |
|
public function demanderAuthentificationUtilisateur() { |
if(!$this->etreUtilisateurAutorise()) { |
$this->authentifierUtilisateur(); |
} |
} |
|
public function etreUtilisateurAutorise() { |
$identifiant = $this->getAuthIdentifiant(); |
$mdp = $this->getAuthMotDePasse(); |
$existe = $this->obtenirUtilisateur($identifiant, $mdp); |
|
$autorisation = (isset($existe) && $existe) ? true :false; |
return $autorisation; |
} |
|
private function obtenirUtilisateur($login, $motDePasse) { |
$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du'). |
'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '. |
'AND mot_de_passe = MD5('.$this->gestionBdd->getBdd()->proteger($motDePasse).')'; |
$utilisateur = $this->gestionBdd->getBdd()->recuperer($requete); |
return $utilisateur; |
} |
|
public function etreAdminAutorise() { |
$identifiant = $this->getAuthIdentifiant(); |
$autorisation = ($this->etreAdminDel($identifiant) && $this->etreUtilisateurAutorise()) ? true : false; |
return $autorisation; |
} |
|
public function etreAdminDel($courriel) { |
$admins = Config::get('admins'); |
$courriels_autorises = explode(',', $admins); |
$autorisation = (in_array($courriel, $courriels_autorises)) ? true : false ; |
return $autorisation; |
} |
|
private function getAuthIdentifiant() { |
$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null; |
return $id; |
} |
|
private function getAuthMotDePasse() { |
$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null; |
return $mdp; |
} |
|
//TODO: externaliser noms et adresses spécifiques à Tela Botanica |
private function authentifierAdmin() { |
$message_accueil = "Veuillez vous identifier avec votre compte administrateur Tela Botanica."; |
$message_echec = "Accès limité aux administrateurs de DEL.\n". |
"Votre tentative d'identification a échoué.\n". |
"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme administrateur."; |
return $this->authentifier($message_accueil, $message_echec, 'Admin'); |
} |
|
private function authentifierUtilisateur() { |
$message_accueil = "Veuillez vous identifier avec votre compte Tela Botanica."; |
$message_echec = "Accès limité aux utilisateurs de DEL.\n". |
"Inscrivez vous http://www.tela-botanica.org/page:inscription pour le devenir.\n". |
"Votre tentative d'identification a échoué.\n". |
"Actualiser la page pour essayer à nouveau si vous êtes déjà inscrit ou contacter 'accueil@tela-botanica.org'."; |
return $this->authentifier($message_accueil, $message_echec, 'Utilisateur'); |
} |
|
private function authentifier($message_accueil, $message_echec, $type) { |
$id = $this->getAuthIdentifiant(); |
if (!isset($id)) { |
$this->envoyerAuth($message_accueil, $message_echec); |
} else { |
if ($type == 'Utilisateur' && $this->getAuthMotDePasse() == 'debug') { |
$autorisation = true; |
} else { |
$methodeAutorisation = "etre{$type}Autorise"; |
$autorisation = $this->$methodeAutorisation(); |
} |
if ($autorisation == false) { |
$this->envoyerAuth($message_accueil, $message_echec); |
} |
} |
return true; |
} |
|
private function envoyerAuth($message_accueil, $message_echec) { |
header('HTTP/1.0 401 Unauthorized'); |
header('WWW-Authenticate: Basic realm="'.mb_convert_encoding($message_accueil, 'ISO-8859-1', 'UTF-8').'"'); |
header('Content-type: text/plain; charset=UTF-8'); |
print $message_echec; |
exit(0); |
} |
} |