begin process at 2010 03 21 08:41:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE UTILISATEUR POUR GESTION SIMPLE DE LOGIN ET DROITS

CLASSE UTILISATEUR POUR GESTION SIMPLE DE LOGIN ET DROITS


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :utilisateur, droit, gestion, membre, login Niveau :Initié Date de création :14/12/2009 Vu / téléchargé :2 628 / 347

Auteur : Archima

Ecrire un message privé
Site perso
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 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

  • 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);
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 ;)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip SYSTÈME D'ARTICLES

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip ESPACE ADMIN SIMPLE par mousaid_88
Source avec Zip Source avec une capture LISTE REPERTOIRE (DIR EN PHP) par mephistope
Source avec Zip Source avec une capture GESTION DE PARC VÉHICULE par zakmanengineer
Source avec Zip Source avec une capture SEARCH CASIER par tlabidouille
Source avec Zip Source avec une capture GESTION DE DOCUMENTS par awaclid

Commentaires et avis

Commentaire de MartinEden le 15/12/2009 10:43:21

Bonjour, j'ai examiné ton Script. Pour des question de sécurité, je te suggère d'utiliser, PDO php data object.

Cordialement, Martin Eden.

Commentaire de Archima le 15/12/2009 11:12:31

Je ne vois pas de quoi tu veux parler, car il me semble que j'ai utilisé PDO dans mon script. A moins que je ne l'ai pas utilisé de la bonne manière :p

Merci de ta réponse

Cordialement,
Cyrille.

Commentaire de MartinEden le 15/12/2009 15:23:14

Désolé de ne pas avoir été assez précis,

j'utilise souvent dans pour mes requêtes  Query
comme cela
<?php
$login = htmlentities($_POST['login'], ENT_QUOTES);
$mot_de_passe = md5(mysql_real_escape_string($_POST['mot_de_passe']));
mysql_query('SELECT compte_bancaire FROM table WHERE login=' . $login
.' AND mot_de_passe=' . $mot_de_passe . ';');
?>

Commentaire de Archima le 15/12/2009 16:29:39

Je comprend pas vraiment car j'utilise PDO et pas mysql_query, ce qui permet avec pdo->prepare() qui permet entre autre d'éviter un minimum les injections sql. http://www.php.net/manual/fr/pdo.prepared-statements.php

Après, j'avoue ne pas m'y être vraiment attardé, donc je ne sais pas si c'est totalement fiable ou non. Désolé pour cela, je suis encore que initié et j'apprends au fur et à mesure, c'est un peu ma première classe php assez "solide" ;) (sans avoir de cours dessus :(

Commentaire de gomoz le 21/12/2009 10:28:44

MartinEden, je crois que vous faites fausse route (mais je peux me tromper aussi). HtmlEntities c'est pour l'affichage uniquement et mysql_real_escape, il faut l'utiliser sur la data à entrer en BDD et non sur une variable à passer à md5 (md5 ne place jamais d'apostrophes en sortie de plus). Puis pour finir de vous achever (mais non, je ne suis pas si méchant) il faut mettre 'SELECT .. FROM .. login="'.$var.'"' mais là je chipote.

Archima, j'aime bien cette classe mais je pense qu'elle peut-être encore beaucoup amélioré :
- La gestion des groupes
- La gestion des droits par ensemble (exemple : "GestionMembre" sur "forum" ou "site" ou "lesdeux")
- Une gestion plus fine des droits : droit d'écrire, de lire, etc (on peut le faire mais je pense que ca serait pas plus compliqué d'avoir en retour de aLeDroit() un false si pas le droit et un int qui va de 1 à X en fonction du niveau d'accès).

Enfin il y a aussi des histoires d'édition du profil etc mais là c'est plus à chacun d'adapter à sa sauce. En tous cas j'aime l'initiative, c'est dans un bon esprit.

Commentaire de Archima le 21/12/2009 10:52:07

Merci pour ces idées, effectivement je pense que ça ne sera pas bien plus compliqué. Je ferai ça :p

Commentaire de nashouille le 21/12/2009 11:32:36

salut,

il y a de l'idée mais perso j'aurais complètement séparé la partie BDD de la gestion des droits.
Une gestion d'erreur complète propre a la classe manque, idem pour les propriétés d'accès.

Pas de gestion de cookie d'authentification propre a la session.
Il manque une vrai méthode de cryptage.

l'encapsulation n'est pas total, l'intérêt est d'utilisé la totalisé des propriétés pour la manipulation des méthodes. Tu sépare la gestion en static DB et la class elle même(double emploi) cela est visible lors de l'utilisation du modele.

Tu devrais revoir la méthodologie complète de ta class (l'utilisation de telle ou telle api mysql est secondaire par rapport a ce que cherche a mettre en avant.), ici c'est une class de gestion authentification.


je m'arrête, cela est simplement pour te faire avancé.
Amicalement

Commentaire de pyrrah le 07/01/2010 17:09:37

Bonjour,

L'idée est pas mal, et justement ça me donne envie d'en savoir plus sur PDO.
Cependant, y'a un truc qui me choque : l'utilisation de la fonction connectionBDD().
En l'utilisant à chaque fonction, ça va créer une nouvelle connexion mySQL avec le serveur, à chaque appel d'une fonction ? Je suggérerais un pattern Singleton (http://www.phpcs.com/codes/ABSTRACTION-PDO_48879.aspx peut-être une bonne piste, mais je ne suis pas encore un expert de PHP5, ni de PDO).

D'autre part, je suggérerais un peu comme dans http://www.phpcs.com/codes/ABSTRACTION-PDO_48879.aspx, de mettre une possbilité de se déconnecter du serveur.

(Je voudrais dans un script que la connexion avec mySQL soit établise au début du script, j'exécute mes actions à l'aide de utilisateur.class, puis une fois que tout est terminé, je ferme ma connexion dans le pied de la page. D'où la raison de toutes ces lignes ^^)

Amicalement,
Pyrrah.

Commentaire de Archima le 07/01/2010 17:47:08

En fait la fonction connexionBDD() créer une instance PDO avec les informations sur la bdd (adresse, nom, login,password) et la retourne, ensuite dans la classe j'utilise l'objet PDO et quand j'en ai plus besoin $pdo = null. C'est ce que j'ai vu en cours. Après PDO n'est pas mal fait je pense ^^ donc sa fonction __destruct doit stopper la connexion à la base de données.

J'espère avoir éclairé ta lanterne. Après, je ne suis pas non plus un pro du PHP5 ni de PDO (bien que je m'y attèle :D ) et tout ce qu'il y a sur PDO ici, j'ai vu ça en cours donc je certifie rien non plus ...

Commentaire de pyrrah le 08/01/2010 07:54:40 9/10

Merci pour ton aide :D

Commentaire de pyrrah le 08/01/2010 07:55:41

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 :)

Commentaire de pyrrah le 08/01/2010 10:24:23

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.

Commentaire de Archima le 08/01/2010 15:14:55

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 ;)

Commentaire de gomoz le 08/01/2010 18:43:13

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.

Commentaire de Archima le 08/01/2010 19:08:52

Je vais réviser mon code voir ce qui est le mieux.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

variables de session [ par tweeder ] BonjourJ'ai posé la question plus tôt cette semaine mais je crois que je m'étais mal exprimévoila j'aimerais récupérer ma variable de session enregist deonection table log?? [ par pcpourtous ] voial j'ai une table log, une identification avec une variable session "login"je veux gérer une table log : donc quand l'utilisateur se connecte j'ins :: PB MYSQL_FETCH_ROW :: [ par nougitch ] Bonjour à tous,Plutôt débutant en PHP, je vous explique.J'ai créé un espace membre avec une table "x2000_utilisateur".Ce qui me gêne c'est que quand q Problème avec les sessions [ par auremy ] Bonjour,J'aimerais créer un espace réservé, protégé par login et mot de passe. Pour ceci, j'utilise un formulaire permetant d'entrer ses données et qu Erreur lors de l'utilisation de sessions [ par auremy ] Bonjour,Je fais un site avec une partie réservé aux membres, ce qui nécessite donc une identification. Ayant regardé les messages à ce sujet, je n'ai Gestion d'utilisateur [ par mortiis ] Bonjour à tousJe fait un site ou il y a plusieurs utilisateurs.Chaque utilisateur a son username et son password.Pour vérifier sur chaque page si l'ut espace de gestion d'un repertoire pour membres. [ par dcbastien ] Bonjour.Je cherche a créer un espace avec identification qui permettra au membre, enregistré dans mysql, de modifier les fichiers. de son repertoire.C test avant suppression utilisateur [ par benjy54 ] bonjour, j'aimerai faire un test si la personne que je veux supprimer existe dans la base car la quoique je tape, il ecrit utilisateur bien supprim&#2 Identification sans base sql [ par K3nnY ] Je voudrais savoir comment v&#233;rifier le login et le password de personne essayant de se logguer sur leur partie r&#233;serv&#233; , mon probleme e Gestion de connexions pour espace membre [ par dreyann ] SalutJ'ai 2 types de cookies, un de 10 ans et un de 20 minutes aux choix par le membre lors de sa connexion. ces cookies servent &#224; r&#233;cuperer


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales