CLASSE UTILISATEUR POUR GESTION SIMPLE DE LOGIN ET DROITS

cs_MartinEden Messages postés 5 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 15 décembre 2009 - 15 déc. 2009 à 10:43
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011 - 8 janv. 2010 à 19:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50973-classe-utilisateur-pour-gestion-simple-de-login-et-droits

Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
8 janv. 2010 à 19:08
Je vais réviser mon code voir ce qui est le mieux.
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
8 janv. 2010 à 18:43
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
8 janv. 2010 à 15:14
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 127 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 15 février 2010 4
8 janv. 2010 à 10:24
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 127 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 15 février 2010 4
8 janv. 2010 à 07:55
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 :)
Pyrrah Messages postés 127 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 15 février 2010 4
8 janv. 2010 à 07:54
Merci pour ton aide :D
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
7 janv. 2010 à 17:47
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 ...
Pyrrah Messages postés 127 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 15 février 2010 4
7 janv. 2010 à 17:09
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.
cs_nashouille Messages postés 21 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 11 juillet 2008
21 déc. 2009 à 11:32
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
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
21 déc. 2009 à 10:52
Merci pour ces idées, effectivement je pense que ça ne sera pas bien plus compliqué. Je ferai ça :p
cs_gomoz Messages postés 134 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 23 décembre 2009
21 déc. 2009 à 10:28
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.
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
15 déc. 2009 à 16:29
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 :(
cs_MartinEden Messages postés 5 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 15 décembre 2009
15 déc. 2009 à 15:23
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 . ';');
?>
Archima Messages postés 37 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 13 avril 2011
15 déc. 2009 à 11:12
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.
cs_MartinEden Messages postés 5 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 15 décembre 2009
15 déc. 2009 à 10:43
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.