Partage
  • Partager sur Facebook
  • Partager sur Twitter

gestion d'une Base de donnée MySQL

    17 mars 2019 à 12:12:31

    Salutation à la communauté

    Je voudrais mettre en place un système de gestion des utilisateurs. Certains seront en mesure de faire un CRUD complet et d'autre seulement de CREATE et UPDATE.

    Certains (membre du forum) vont me demander ceux que j'ai fais. 

    Mais voilà; je ne sais même pas par où commencer. :-° 

    • Partager sur Facebook
    • Partager sur Twitter
      18 mars 2019 à 8:55:00

      Bonjour,

      Tu travailles sur une application ? Avec quel langage ?

      Je pose cette question car si tu veux utiliser des utilisateurs côté SGBD, il faudra d'abord que l'utilisateur se connecte à ton application pour déterminer de quels droits ils disposent, donc une première connexion au SGBD avec les droits au moins en SELECT.

      Une fois l'utilisateur connecté et ses droits identifiés, soit tu gères ces droits côté application, soit tu utilises alors des utilisateurs côté SGBD et tu gères les erreurs ("tel utilisateur n'a pas le droit de faire cela") côté applicatif ...

      Personnellement, je pense que :

      • le plus simple c'est de tout gérer côté application
      • le plus sécurisé mais le plus compliqué c'est de gérer les utilisateurs côté SGBD
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        18 mars 2019 à 10:59:29

        Bonjour Benzouye

        Oui je travail en effet sur une application et j'utilise PHP

        Etant donné que c'est pour débuter je vais commencer par le plus simple tout gérer coté application 

        Tu peux me donner une liste des choses à faire pou y parvenir.    MERCI

        -
        Edité par Lhéritier 18 mars 2019 à 11:01:07

        • Partager sur Facebook
        • Partager sur Twitter
          18 mars 2019 à 13:32:17

          Comme tu l'indiques dans ton premier message, tu vas avoir deux types d'utilisateurs : CRUD et CD. On pourrait donc simplifier cela en disant qu'il y a des utilisateurs "admin" et d'autres non.

          Tu pourrais donc créer une table utilisateur. Avec par exemple les colonnes id (entier auto incrémenté), pseudo (varchar), motdepasse (charchar) et admin (booléen, valant 0 ou 1).

          Dans cette table tu stockes tes utilisateurs avec 0 si CD et 1 si CRUD.

          Dans ton application tu proposes un formulaire de connexion avec saisie de pseudo et mot de passe. Si l'authentification est réussie, alors tu récupères la valeur de la colonne admin, et en fonction tu peux gérer l'affichage des bouton CREER, SELECTIONNER, METTRE A JOUR et SUPPRIMER. Et compléter cela en contrôlant la valeur de admin avant d'exécuter ces actions, et les refuser le cas échéant.

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            19 mars 2019 à 9:44:44

            Bonjour Benzouye 

            J'ai produit un petit truc qui me permet d'afficher les boutons de manière contextuel (selon les privilèges ) 

            maintenant je voudrais savoir comment faire pour gérer les privilèges depuis la Base de donnée

            • Partager sur Facebook
            • Partager sur Twitter
              19 mars 2019 à 10:00:17

              Mon explication précédente n'est pas satisfaisante ?

              Tu veux gérer les privilèges de manière plus détaillée que simplement "admin ou non" ?

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                19 mars 2019 à 10:04:54

                Si je l'ai comprise mais tu avais parlé d'une autre manière de gérer les utilisateurs depuis la base de donnée c'est de ça que je parle

                • Partager sur Facebook
                • Partager sur Twitter
                  19 mars 2019 à 10:51:11

                  Pour gérer côté SGBD, il faut créer tes utilisateurs MySQL distincts, chacun avec ces droits spécifiques ...

                  https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1975880-gestion-des-utilisateurs

                  Côté PHP, il faut faire une première connexion à la base de données (PDO ?) avec un utilisateur qui a les droits en lecture sur la table des utilisateurs pour gérer l'authentification, en testant identifiant/mot de passe pour récupérer le profil de l'utilisateur (admin ou non). Une fois cela fait, il faut alors créer une nouvelle connexion à la base de données (PDO ?) avec un utilisateur ayant les droits associés à son profil.

                  Dans le reste du code PHP, pour chaque requête il faut que tu gères l'erreur retournée par MySQL si l'utilisateur connecté n'a pas les droits ...

                  Le code PHP pourrait ressembler à ceci :

                  // Les identifiants des utilisateurs
                  $utilisateur_admin = 'admin_user';
                  $utilisateur_light = 'light_user';
                  $mdp_admin = 'admin_password';
                  $mdp_light = 'light_password';
                  
                  // Les options de PDO
                  $pdoOptions[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                  $pdoOptions[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;
                  
                  try {
                  	// On se connecte avec l'utilisateur light qui doit avoir les droits SELECT sur la table utilisateur
                  	$connexionDepart = new PDO ( 'mysql:host=...;dbname=...;charset=UTF8', $utilisateur_light, $mdp_light, $pdoOptions );
                  	
                  	// On cherche si utilisateur OK
                  	$requete = $connexionDepart->prepare( '
                  		SELECT *
                  		FROM utilisateur
                  		WHERE
                  			pseudo = :pseudo
                  			AND password = :password'
                  	);
                  	$requete->execute( array(
                  		'pseudo' => $_POST['pseudo'],
                  		'password' => $_POST['password']
                  	));
                  	$utilisateur = $requete->fetch();
                  	
                  	// Si authentification réussie
                  	if( $utilisateur ) {
                  		if( $utilisateur->admin ) {
                  			// Si utilisateur admin on se connecte admin
                  			$bdd = new PDO ( 'mysql:host=...;dbname=...;charset=UTF8', $utilisateur_admin, $mdp_admin, $pdoOptions );
                  		} else {
                  			// Sinon on reste connecté light
                  			$bdd = $connexionDepart;
                  		}
                  	}
                  	$connexionDepart = null;
                  }
                  catch( Exception $e ) {
                  	var_dump( $e );
                  }

                  Dans le reste du programme PHP tu vas utiliser la variable PDO $bdd, et il faudra gérer correctement les erreurs retournées. Exemple :

                  try {
                  	$requete = $bdd->query( 'UPDATE utilisateur SET pseudo = "toto" WHERE pseudo = "";' );
                  }
                  catch( Exception $e ) {
                  	if( strpos( $e->getMessage(), 'denied' ) ) {
                  		echo 'Droits insuffisants';
                  	} else {
                  		var_dump( $e );
                  	}
                  }

                  Ici si l'utilisateur connecté n'a pas les droits d'UPDATE la table utilisateur, alors MySQL retournera une erreur avec un message "... command denied ..." le bloc catch affichera alors "Droits insuffisant" ...

                  Mais de te conseille de gérer quand même l'affichage des actions dans ton appli en fonction du profil, rien de plus exaspérant que de voir un bouton "Supprimer" et d'avoir une erreur "Vous ne pouvez pas supprimer" en cliquant dessus ...

                  -
                  Edité par Benzouye 19 mars 2019 à 10:52:47

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    19 mars 2019 à 11:27:59

                    Merci Benzouye 

                     rien de plus exaspérant que de voir un bouton "Supprimer" et d'avoir une erreur "Vous ne pouvez pas supprimer" en cliquant dessus ...

                    :D J'ai l'intention d'afficher les boutons en fonctions du profil de l'utilisateur

                    Encore merci je vais bricoler un peu et je te reviens

                    -
                    Edité par Lhéritier 19 mars 2019 à 11:30:15

                    • Partager sur Facebook
                    • Partager sur Twitter

                    gestion d'une Base de donnée MySQL

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown