Classe utilisateur pour gestion simple de login et droits

Soyez le premier à donner votre avis sur cette source.

Vue 15 809 fois - Téléchargée 2 372 fois

Description

J'ai fait cette source dans le cadre d'un projet en cours.
Elle permet une utilisation d'utilisateurs avec login/mot de passe et des droits assez simplement.
Il n'y a que la classe, pas de mise en page de l'administration ou quoique ce soit, c'est au programmeur de faire tout ça. La classe fournit juste les outils pour utiliser une base de données avec des utilisateurs et des droits.

Le code parlera mieux que moi ;)

Il y a 3 tables : membres, droits, dispose_de
La table membre contient les membres. Le champ admin indique si le membre possède des droits ou non.
La table droits contient les droits avec une id, un nom et une description.
La table dispose_de indique les droits qu'a tel ou tel membre.

Il y a plusieurs méthodes :
function Utilisateur($idMembre);
private function droits();
public static function inscription($pseudo, $motDePasse, $nom, $prenom, $sexe, $dateDeNaissance, $email, $adresse, $ville, $codePostal, $pays, $participeAuConcours);
public static function pseudoDejaUtilise($pseudo);
public static function emailDejaUtilise($email);
public static function connexion($pseudoUtilisateur, $motDePasse, $varSession);
public static function deconnexion($varSession);
public function sauvegarderLUtilisateur();
public static function supprimerLUtilisateur($id_membre);
public function isAdmin();
public function aLeDroit($leDroit);
+ geteur;
+ seteur;

Je sais que je n'utilise pas toute la puissance du php objet dans ma classe, mais je vais m'y mettre un de ces quatre matins ;)

Source / Exemple :


Pour créer les tables :

CREATE TABLE IF NOT EXISTS `dispose_de` (
  `id_dispose` int(11) NOT NULL AUTO_INCREMENT,
  `id_droits` int(11) NOT NULL,
  `id_membres` int(11) NOT NULL,
  PRIMARY KEY (`id_dispose`),
  KEY `id_droits` (`id_droits`),
  KEY `id_membres` (`id_membres`)
);

CREATE TABLE IF NOT EXISTS `droits` (
  `id_droit` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(20) DEFAULT NULL,
  `description` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id_droit`)
);

CREATE TABLE IF NOT EXISTS `membres` (
  `id_membre` int(11) NOT NULL AUTO_INCREMENT,
  `pseudo` varchar(20) NOT NULL,
  `mot_de_passe` varchar(50) NOT NULL,
  `nom` varchar(20) DEFAULT NULL,
  `prenom` varchar(20) DEFAULT NULL,
  `email` varchar(40) NOT NULL,
  `sexe` varchar(1) DEFAULT NULL,
  `date_de_naissance` date DEFAULT NULL,
  `adresse` varchar(50) DEFAULT NULL,
  `ville` varchar(30) DEFAULT NULL,
  `code_postal` varchar(10) DEFAULT NULL,
  `pays` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `url_avatar` varchar(50) DEFAULT NULL,
  `participe_au_concours` tinyint(1) DEFAULT NULL,
  `admin` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id_membre`)
);

#Exemples d'utilisations (extrais d'une application) :

=>Connecter un utilisateur :
$TEXTE_connexion = ""; // Texte qui sera mit au module connexion si nécéssaire
if (isset($_POST["pseudo"]) && isset($_POST["password"]))
{
	//On execute la fonction connexion qui renvoie true ou false
	$validation = Utilisateur::connexion($_POST["pseudo"], $_POST["password"], "membre");				
	if(!$validation){// Si la connexion a échoué on l'indique en rajoutant un texte près du module 
		$TEXTE_connexion = "Pseudo inexistant ou mot de passe invalide";
	}
}

=>Un fois connecté :
//# Si le membre est connecté on créer son objet (le membre est connecté quand la variable de session existe, voir fonction Utilisateur::connexion )	
if(isset($_SESSION['membre'])){
	$leMembre = new Utilisateur($_SESSION['membre']);
	//print_r($leMembre);
}

=> Exemple pour un panneau d'admin :
if(isset($leMembre) && $leMembre->isAdmin()){
	...
	if($leMembre->aLeDroit("gestionMembres"))
		echo '<img id="boutonMembres" src="images/onglet_membre_actif.png" alt="membres" />';
	...
	if($leMembre->aLeDroit("gestionMembres")){
		//LISTAGE DES MEMBRES ICI
		echo '	<!-- Liste des membres -->
			<table id="liste_membres">...';
	}
}

=> Changer le nom de l'utilisateur :
$leMembre->setPrenom($_POST['prenom']);
$retour = $leMembre->sauvegarderLUtilisateur();
if(!$retour)
	$TEXTE_compte .= "ECHEC de la sauvegarde des modifications.";

=> Supprimer un utilisateur :
if(!Utilisateur::supprimerLUtilisateur($_GET['suppmbr']))
	$TEXTE_admin = "Erreur à la suppression du membre.<br/>";

=> Inscrire un utilisateur :
Utilisateur::inscription($_POST['pseudoInscription'], $_POST['passwordInscription'], $_POST['nom'], $_POST['prenom'], $_POST['sexe'], $_POST['dateNais'], $_POST['email'], $_POST['adresse'], $_POST['ville'], $_POST['codePostal'], $_POST['pays'], $participeAuConcours);

Conclusion :


Bon, voila, y a pas mal de commentaire je pense, donc ça devrai aller. C'est pas du php haut niveau, mais ça reste quand même pour les initiés.

Si vous avez des questions ou autre, n'hésitez pas ;)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Archima
Messages postés
37
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
13 avril 2011

Je vais réviser mon code voir ce qui est le mieux.
cs_gomoz
Messages postés
135
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
23 décembre 2009

Ben moi je fais comme ça :
private $pdo;
__construct()
{
$this->pdo = connectionBDD();
}

Ceci dit je ne suis pas sur que ce soit la meilleurs méthode.
Archima
Messages postés
37
Date d'inscription
samedi 19 avril 2008
Statut
Membre
Dernière intervention
13 avril 2011

Ba, je sais pas vraiment si elles pourront être virées car j'utilise l'objet PDO, peut être en mettant comme attribut de l'objet un objet PDO qui sera ensuite utilisé dans les requêtes, mais je doute, il faudrait l'avis de quelqu'un qui utilise PDO de façon plus poussé que moi.

Merci pour tes commentaires ;)
Pyrrah
Messages postés
129
Date d'inscription
mercredi 16 février 2005
Statut
Membre
Dernière intervention
15 février 2010
4
C'est encore moi :D
Je te suggére quand même de mettre dans ton constructeur la fonction d'ouverture de connexion mySQL et de mettre un déstructeur pour la fermeture de connexion au serveur mySQL.
Les répétitions de "connectionBDD()" peuvent être virées ensuite.
Pyrrah
Messages postés
129
Date d'inscription
mercredi 16 février 2005
Statut
Membre
Dernière intervention
15 février 2010
4
J'ajoueterais que je pense que c'est une très bonne base pour ceux/celles qui souhaitent comprendre le fonctionnement de PDO mais aussi ceux/celles qui débutent en PHP5. Bonne journée :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (Archima)