Subversion Repositories eFlore/Applications.del

Rev

Rev 1478 | Rev 1666 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1478 Rev 1606
Line 1... Line 1...
1
<?php
1
<?php
2
/**
2
/**
3
* Classe de controle d'accès utilisant l'authentification http pour bloquer ou autoriser l'accès.
3
* Classe de controle d'accès aux services
4
* Elle offre des méthodes permettant de réserver l'accès à une section aux admins ou bien aux utilisateurs identifiés
-
 
5
*
4
*
-
 
5
* Cette classe propose des méthodes permettant :
-
 
6
*  - l'authentification http pour bloquer ou autoriser l'accès
-
 
7
*  - de déterminer les droits des utilisateurs
-
 
8
*
6
* @category php 5.2
9
* @category DEL
7
* @package del
10
* @package Commun
8
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
11
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
9
* @copyright Copyright (c) 2012, Tela Botanica (accueil@tela-botanica.org)
12
* @author Jean-Pascal Milcent <jpm@tela-botanica.org>
10
* @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
* @license	http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
* @license	http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
* @version	$Id$
15
* @copyright Copyright (c) 1999-2014, Tela Botanica (accueil@tela-botanica.org)
13
*/
16
*/
14
class ControleAcces {
17
class ControleAcces {
Line 15... Line 18...
15
	
18
 
16
	private $conteneur;
19
	private $conteneur;
Line 21... Line 24...
21
		$this->conteneur = $conteneur;
24
		$this->conteneur = $conteneur;
22
		$this->gestionBdd = $conteneur->getGestionBdd();
25
		$this->gestionBdd = $conteneur->getGestionBdd();
23
		$this->bdd = $this->gestionBdd->getBdd();
26
		$this->bdd = $this->gestionBdd->getBdd();
24
	}
27
	}
Line -... Line 28...
-
 
28
 
-
 
29
	public function controlerIpAutorisees() {
-
 
30
		$ipAutorisees = $this->conteneur->getParametre('ip_autorisees');
-
 
31
		$ipAutorisees = explode(',', $ipAutorisees);
-
 
32
 
-
 
33
		if (!in_array($_SERVER['REMOTE_ADDR'], $ipAutorisees) && $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) {
-
 
34
			$message = "Accès interdit. \n"."Vous n'êtes pas autorisé à accéder à ce service depuis '{$_SERVER['REMOTE_ADDR']}' !\n";
-
 
35
			$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
-
 
36
			throw new Exception($message, $code);
-
 
37
		}
-
 
38
		return true;
-
 
39
	}
25
	
40
 
26
	public function demanderAuthentificationAdmin() {
41
	public function demanderAuthentificationAdmin() {
27
		if(!$this->etreAdminAutorise()) {
42
		if (!$this->etreAdminAutoriseParHttp()) {
28
			$this->authentifierAdmin();
43
			$this->authentifierAdmin();
29
		}
44
		}
Line 30... Line 45...
30
	}
45
	}
31
	
46
 
32
	public function demanderAuthentificationUtilisateur() {
47
	public function demanderAuthentificationUtilisateur() {
33
		if(!$this->etreUtilisateurAutorise()) {
48
		if (!$this->etreUtilisateurAutoriseParHttp()) {
34
			$this->authentifierUtilisateur();
49
			$this->authentifierUtilisateur();
Line 35... Line 50...
35
		}
50
		}
36
	}
51
	}
37
	
52
 
38
	public function etreUtilisateurAutorise() {
53
	private function etreUtilisateurAutoriseParHttp() {
Line 39... Line 54...
39
		$identifiant = $this->getAuthIdentifiant();
54
		$identifiant = $this->getAuthIdentifiant();
40
		$mdp = $this->getAuthMotDePasse();
55
		$mdp = $this->getAuthMotDePasse();
41
		$existe = $this->obtenirUtilisateur($identifiant, $mdp);
56
		$existe = $this->obtenirUtilisateur($identifiant, $mdp);
Line 42... Line 57...
42
	
57
 
-
 
58
		$autorisation = (isset($existe) && $existe) ? true :false;
-
 
59
		return $autorisation;
43
		$autorisation = (isset($existe) && $existe) ? true :false;
60
	}
-
 
61
 
44
		return $autorisation;
62
	private function obtenirUtilisateur($login, $motDePasse) {
45
	}
63
		$login = $this->bdd->proteger($login);
-
 
64
		$motDePasse = $this->bdd->proteger($motDePasse);
46
	
65
		$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe '.
47
	private function obtenirUtilisateur($login, $motDePasse) {
66
			'FROM del_utilisateur AS du '.
48
		$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
67
			"WHERE courriel = $login ".
Line 49... Line -...
49
						'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '.
-
 
50
						'AND mot_de_passe = MD5('.$this->gestionBdd->getBdd()->proteger($motDePasse).')';
-
 
51
		$utilisateur = $this->gestionBdd->getBdd()->recuperer($requete . ' -- ' . __FILE__ . ':' . __LINE__);
-
 
52
		return $utilisateur;
-
 
53
	}
-
 
54
	
-
 
55
	private function obtenirUtilisateurSansEncryptionMdp($login, $motDePasseEncrypte) {
-
 
56
		$requete = 'SELECT id_utilisateur, nom, prenom, courriel, mot_de_passe FROM '.$this->gestionBdd->formaterTable('del_utilisateur', 'du').
-
 
57
							'WHERE courriel = '.$this->gestionBdd->getBdd()->proteger($login).' '.
68
			"	AND mot_de_passe = MD5($motDePasse) ".
58
							'AND mot_de_passe = '.$this->gestionBdd->getBdd()->proteger($motDePasseEncrypte).' ';
69
			' -- '.__FILE__.':'.__LINE__."\n";
59
		$utilisateur = $this->gestionBdd->getBdd()->recuperer($requete . ' -- ' . __FILE__ . ':' . __LINE__);
70
		$utilisateur = $this->bdd->recuperer($requete);
60
		return $utilisateur;
71
		return $utilisateur;
61
	}
72
	}
Line 62... Line 73...
62
	
73
 
-
 
74
	private function etreAdminAutoriseParHttp() {
63
	public function etreAdminAutorise() {
75
		$identifiant = $this->getAuthIdentifiant();
-
 
76
		$autorisation = ($this->etreAdmin($identifiant) && $this->etreUtilisateurAutorise()) ? true : false;
-
 
77
		return $autorisation;
-
 
78
	}
-
 
79
 
-
 
80
	private function etreAdmin($courriel) {
-
 
81
		$courriel = $this->bdd->proteger($courriel);
-
 
82
		$requete = 'SELECT dui.admin '.
-
 
83
			'FROM del_utilisateur AS du LEFT JOIN del_user_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
-
 
84
			"WHERE du.courriel = $courriel ".
64
		$identifiant = $this->getAuthIdentifiant();
85
			' -- '.__FILE__.':'.__LINE__."\n";
65
		$autorisation = ($this->etreAdminDel($identifiant) && $this->etreUtilisateurAutorise()) ? true : false;
86
		$infoUtilisateur = $this->bdd->recuperer($requete);
-
 
87
 
-
 
88
		$etreAdmin = $this->verifierDroitAdmin($infoUtilisateur['admin']);
-
 
89
		return $etreAdmin;
-
 
90
	}
66
		return $autorisation;
91
 
67
	}
92
	private function verifierDroitAdmin($droit) {
Line 68... Line 93...
68
	
93
		$droitAdmin = $this->conteneur->getParametre('droit_superadmin');
69
	public function etreAdminDel($courriel) {
94
		$etreAdmin = false;
70
		$admins = Config::get('admins');
95
		if (isset($droit) && $droit == $droitAdmin) {
Line 117... Line 142...
117
			}
142
			}
118
		}
143
		}
119
		return true;
144
		return true;
120
	}
145
	}
Line -... Line 146...
-
 
146
 
-
 
147
	public function etreUtilisateurAvecDroitAdmin() {
-
 
148
		$infos = $this->getInfosUtilisateurConnecte();
-
 
149
 
-
 
150
		$etreAdmin = false;
-
 
151
		if (isset($infos['admin'])) {
-
 
152
			$etreAdmin = $this->verifierDroitAdmin($infos['admin']);
-
 
153
		}
-
 
154
		return $etreAdmin;
-
 
155
	}
121
	
156
 
-
 
157
	public function getInfosUtilisateurConnecte() {
122
	public function getInfosUtilisateurConnecte() {
158
		$utilisateur = array();
123
		if(isset($_COOKIE["del_courriel"])) {
159
		if (isset($_COOKIE['del_courriel'])) {
124
			$utilisateur = array('del_courriel' => $_COOKIE["del_courriel"],
160
			$courriel = $_COOKIE['del_courriel'];
125
								'del_mot_de_passe' => $_COOKIE["del_mot_de_passe"]);
161
			$motDePasse = $_COOKIE['del_mot_de_passe'];
-
 
162
			$utilisateur = $this->obtenirUtilisateurSansEncryptionMdp($courriel, $motDePasse);
-
 
163
 
-
 
164
			if ($utilisateur == false) {
-
 
165
				$message = "Vos login et/ou mot de passe ne sont pas corrects !\n";
-
 
166
				$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
-
 
167
				throw new Exception($message, $code);
-
 
168
			}
-
 
169
		} else {
-
 
170
			$message = "Vous n'êtes pas identifié à DEL et/ou le cookie de DEL n'est pas accessible !\n";
-
 
171
			$code = RestServeur::HTTP_CODE_ACCES_NON_AUTORISE;
-
 
172
			throw new Exception($message, $code);
-
 
173
		}
126
			$utilisateur = $this->obtenirUtilisateurSansEncryptionMdp($utilisateur['del_courriel'], $utilisateur['del_mot_de_passe']);
174
		return $utilisateur;
Line -... Line 175...
-
 
175
	}
-
 
176
 
-
 
177
	private function obtenirUtilisateurSansEncryptionMdp($login, $motDePasseEncrypte) {
-
 
178
		$login = $this->bdd->proteger($login);
-
 
179
		$motDePasseEncrypte = $this->bdd->proteger($motDePasseEncrypte);
-
 
180
		$requete = 'SELECT du.*, dui.* '.
-
 
181
			'FROM del_utilisateur AS du '.
-
 
182
			'	LEFT JOIN del_utilisateur_infos AS dui ON (du.id_utilisateur = dui.id_utilisateur) '.
-
 
183
			"WHERE du.courriel = $login ".
-
 
184
			"	AND du.mot_de_passe = $motDePasseEncrypte ".
127
		}
185
			' -- '.__FILE__.':'.__LINE__."\n";
128
		
186
		$utilisateur = $this->bdd->recuperer($requete);
Line 129... Line 187...
129
		return $utilisateur;
187
		return $utilisateur;
130
	}
188
	}
131
	
189
 
132
	public function getIdAnonymeTemporaire() {
190
	public function getIdAnonymeTemporaire() {
Line 133... Line 191...
133
		$this->demarrerSession();
191
		$this->demarrerSession();
134
		return session_id();
192
		return session_id();
135
	}
193
	}
136
	
194
 
137
	private function demarrerSession() {
195
	private function demarrerSession() {
138
		if(session_id() == '') {
196
		if (session_id() == '') {
139
			// modifier ce test lors du passage en php 5.4
197
			// TODO : modifier ce test lors du passage en php 5.4
140
			session_start();
198
			session_start();