OpenClassrooms

      Faire un système de droits d'accès grâce aux opérateurs binaires

      OpenClassrooms
      En Semi-présenciel Paris

      Prix sur demande
      Ou préférez-vous appeler directement le centre?
      18088... Voir plus
      Désirez-vous contacter un conseiller pour cette formation ?

      Infos importantes

      Typologie Formation
      Méthodologie En semi-présentiel
      Lieu Paris
      • Formation
      • En semi-présentiel
      • Paris
      Description

      Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

      Installations (1)
      Où et quand
      Début Lieu
      Consulter
      Paris
      7 Cité Paradis, 75010, (75) Paris, France
      Voir plan
      Début Consulter
      Lieu
      Paris
      7 Cité Paradis, 75010, (75) Paris, France
      Voir plan

      Questions / Réponses

      Pose une question et d'autres utilisateurs vous répondrons

      Programme

      Introduction du cours

      Bienvenue dans ce tutoriel !

      Dans ce tuto, vous apprendrez à donner / enlever des droits à des utilisateurs.
      Cela est très utile dans le cas de la gestion d'un site à plusieurs (admins, rédacteurs, modérateurs...).

      Si vous voulez que la page nouvel_article.php ne soit accessible qu'aux administrateurs et aux rédacteurs, ce tuto est fait pour vous.

      Vous pourrez aussi créer des groupes de permissions qu'il sera possible de modifier ou de supprimer par la suite.

      Mises à jour :

      • 29/09/07 : utilisation des opérateurs binaires pour les droits.

      • 17/10/07 : correction des fautes d'orthographe présentes.

      En avant ! :pirate:

      Niveau : 8/10 — Avancé.

      Ce tutoriel n'est pas adressé aux codeurs qui viennent juste de sortir du tutoriel de M@teo21 ! Mais n'ayez pas peur, j'ai tout mis en œuvre pour expliquer le mieux possible. :) Cependant, la notion principale abordée (les opérateurs binaires) n'est pas simple à comprendre si l'on n'a pas le bon tuto sous la main ; heureusement pour vous, je suis là. :p

      Informations et création des tablesInformations

      Dans cette première partie, je vais vous indiquer précisément ce que nous allons faire et aussi vous donner le code SQL pour créer les deux tables. ;)

      Comme je vous l'ai dit dans l'introduction, vous allez apprendre à gérer les permissions (les accès aux pages, en quelque sorte) des utilisateurs.
      Cela sera peut-être utile pour un site avec un forum, un site de news...

      Voici les pages que nous allons créer :

      • ajouter_gr_perm.php : cette page sert à créer un groupe de permissions ;

      • modifier_gr_perm.php : avec cette page, il sera possible de modifier un groupe de permissions ;

      • del_gr_perm.php : là, c'est pour supprimer un groupe de permissions ;

      • add_user.php : vous pourrez ajouter un utilisateur sur cette page.

      Vous pouvez modifier ces noms, il n'y a aucun problème. ;)

      Vous aurez aussi à modifier la page PHP qui vous permet de vous connecter à l'administration de votre site (/forum).

      Définition d’un groupe de permissions : ensemble de droits d'accès (aux pages) pouvant être attribués à un utilisateur.

      Prenez en note que dans ce tutoriel, je ne gérerai que trois permissions :

      • ajouter un article ;

      • modifier un article ;

      • supprimer un article.

      Par la suite, vous pourrez modifier mon script afin d'ajouter des permissions, pas de souci également. :D

      Création des tables

      Pour que tous nos fichiers fonctionnent bien, il leur faut deux tables SQL. Si vous ne savez pas ce que c'est, lisez le tuto de M@teo21 (sur le PHP).

      Il est possible de créer la table très facilement, viaphpmyadmin. phpmyadmin est un logiciel utilisé par la plupart des hébergeurs, il vous sert à créer / modifier / supprimer des tables via une interface. :)

      Procédons à la création de la table 'permissions', celle qui sera utilisée pour tous les groupes.

      Rendez-vous donc sur « le » phpmyadmin de votre hébergeur et cliquez sur l'onglet « SQL ».
      Vous devriez arriver sur une page avec une boîte de texte ; copiez-collez ce code dedans :

      CREATE TABLE `permissions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nom` varchar(255) NOT NULL, `permissions` INT(11) NOT NULL, KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

      Normalement, après avoir cliqué sur « Exécuter », la table est créée ! :)

      Refaites les mêmes opérations, mais avec le code ci-dessous.
      Il va créer la table 'users', utilisée pour la gestion des utilisateurs.

      Le code :

      CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pseudo` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `id_groupe` int(11) NOT NULL, KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Informations supplémentaires à la suite de la mise à jour

      Eh oui, ce tutoriel a été mis à jour !
      Avant la mise à jour, pour gérer les droits, on utilisait un champ SQL pour chaque droit.

      Dorénavant, nous utiliserons un champ qui contiendra tous les droits !
      Si l'on peut faire ça, c'est grâce aux opérateurs de bits.

      Vous pouvez lire un tutoriel qui en parle ici : http://www.siteduzero.com/tuto-3-6518- [...] -de-bits.html.
      Je précise aussi qu'il est bon de le lire avant de lire celui-ci, mais ce n'est pas une obligation !

      Plutôt que d'expliquer après chaque script à quoi sert telle ou telle ligne bizarre utilisant les opérateurs de bits, je vais tout vous expliquer ici. :)
      Voici ceux que nous utiliserons :

      • ajout de droit(s) : quand j'aurai à ajouter un droit (= une permission), je ferai quelque chose dans ce style :

        <?php $droits |= Add_article; ?>

        Ici, nous mettons un « OU » ( | ) juste avant le signe « égal ». Add_article est une constante.

      • suppression d'un droit : dans la modification des groupes de permissions, j'aurai besoin de supprimer des droits. Je mettrai ce code :

        <?php $droits &= ~(Mod_article | Add_article); ?>

        Je précise que le nom des constantes pourra changer. ;)

      • vérification d'un droit : pour protéger vos pages, vous devrez faire une condition. Cette condition ressemblera à celle-ci :

        <?php if (((int)$_SESSION['droits'] & LIRE_ARTICLE)) { echo 'Lire article : OK<br />'; } ?>

        Je vous en reparlerai plus précisément quand nous aurons à l'utiliser. ;)

      Vous voilà maintenant rapidement initié aux opérateurs de bits. Encore une fois, si vous voulez en savoir plus, je vous conseille d'aller lire ce tutoriel :
      http://www.siteduzero.com/tuto-3-6518- [...] -de-bits.html.

      Ajouter, modifier et supprimer les groupes

      Fini le bla-bla... on passe aux choses sérieuses. :p

      On va enfin pouvoir créer des groupes : c'est pas trop tôt, depuis le temps que je suis arrivé sur cette page !

      Eh oui, il fallait bien que j'explique. :)

      Créer un groupe de permissions

      Pour faire cette action, nous allons créer la page ajouter_gr_perm.php.
      Dans cette page, on trouvera le formulaire ainsi que le traitement en PHP !

      Voici le code :

      <?php // On démarre la session session_start(); mysql_connect('localhost', 'root', ''); // Vos identifiants mysql_select_db('tuto_perm'); define ('ECRIRE_ARTICLE', 0x01); // Nous définissons les constantes de droits define ('SUPPRIMER_ARTICLE', 0x02); // Une constante = un droit define ('MODIFIER_ARTICLE', 0x08); // Pour savoir à quoi correspondent les valeurs des constantes, allez ici : http://www.siteduzero.com/tuto-3-6518-1-introduction-aux-operateurs-de-bits.html#ss_part_6 if(isset($_POST['Nom'])) // Si le formulaire a été validé, on peut effectuer les actions PHP { $nom = $_POST['Nom']; // Le nom du groupe if( $_POST['Add_article'] == 'add_article_oui') // Si dans le formulaire, on a indiqué que ce groupe pouvait ajouter un article... { $droits |= ECRIRE_ARTICLE; // On ajoute la permission dans la variable $droits } ## Mêmes actions ci-dessous avec Modifier un article et Supprimer un article ## if( $_POST['Mod_article'] == 'mod_article_oui') { $droits |= MODIFIER_ARTICLE; } if( $_POST['Del_article'] == 'del_article_oui') { $droits |= SUPPRIMER_ARTICLE; } $requete = 'INSERT INTO permissions(nom, permissions) VALUES ("'.$nom.'", "'.@$droits.'")'; // On prépare la requête, ça va ajouter les permissions stockées dans $droits, ainsi que le nom $ex_requete = mysql_query($requete)or die(mysql_error()); // On exécute la requête ou on affiche une erreur if($ex_requete) echo 'Le groupe a bien été ajouté !<br />'; // Si c'est OK, on affiche un message disant que c'est bon else echo 'Le groupe n\'a pu être ajouté !<br />'; // Sinon, on en affiche un disant que ce n'est pas bon... } ########### FORMULAIRE ########### ?> <p>Bienvenue dans la gestion des permissions.<br /> Sur cette page, vous pouvez ajouter un groupe de permissions.<br /> Pour cela, il vous suffit de remplir les cases ci-dessous.<br /> </p> <form name="add_groupe" method="post"> <label for="Nom">Nom du groupe : </label><input type="text" name="Nom" /><br /> <label for="Add_article">Possibilité d'ajouter un article : </label> <select name="Add_article" id="Add_article"> <option value="add_article_oui">Oui</option> <option value="add_article_non">Non</option> </select><br /> <label for="Mod_article">Possibilité de modifier un article : </label> <select name="Mod_article" id="Mod_article"> <option value="mod_article_oui">Oui</option> <option value="mod_article_non">Non</option> </select><br /> <label for="Del_article">Possibilité de supprimer un article : </label> <select name="Del_article" id="Del_article"> <option value="del_article_oui">Oui</option> <option value="del_article_non">Non</option> </select><br /> <input type="submit" name="creer" value="Créer le groupe de permissions !" /></form>

      Malgré mes commentaires, vous pouvez ne pas comprendre certaines actions : dans ce cas, envoyez-moi un MP. ;)

      Si vous testez la page, vous verrez le formulaire. :)
      Vous pouvez même entrer les informations et valider, ça marche ! :)

      Modification / suppression des groupes

      Passons à la modification et à la suppression des groupes.

      Pour la modification des groupes (le script le plus dur de tous ceux du tuto :p ), voici le code :

      <?php // On démarre la session session_start(); mysql_connect('localhost', 'root', ''); // Vos identifiants mysql_select_db('tuto_perm'); define ('ECRIRE_ARTICLE', 0x01); // Nous définissons les constantes de droits define ('SUPPRIMER_ARTICLE', 0x02); // Une constante = un droit define ('MODIFIER_ARTICLE', 0x08); // Pour savoir à quoi correspondent les valeurs des constantes, allez ici : http://www.siteduzero.com/tuto-3-6518-1-introduction-aux-operateurs-de-bits.html#ss_part_6 $select = mysql_query('SELECT * FROM permissions WHERE id = "'.$_REQUEST['id'].'" ')or die(mysql_error()); // On sélectionne les infos $donnees = mysql_fetch_assoc($select); // On met tout ça dans un tableau if(!isset($_REQUEST['id'])) // Si on n'a pas choisi le groupe à modifier { $select = mysql_query('SELECT * FROM permissions')or die(mysql_error()); echo 'Veuillez sélectionner le groupe à modifier : <br /><ul>'; while($nom = mysql_fetch_assoc($select)) { echo '<li><a href="?id='.$nom['id'].'">'.$nom['nom'].'</a></li><br />'; } echo '</ul>'; } elseif(!isset($_POST['id'])) // Si le formulaire n'est pas posté { if (((int)$donnees['permissions'] & ECRIRE_ARTICLE)) { $selected_add_article = 1; } else { $selected_add_article = 0; } if (((int)$donnees['permissions'] & SUPPRIMER_ARTICLE)) { $selected_del_article = 1; } else { $seleted_del_article = 0; } if (((int)$donnees['permissions'] & MODIFIER_ARTICLE)) { $selected_mod_article = 1; } else { $selected_mod_article = 0; } ?><p>Vous pouvez modifier, si vous le souhaitez, les infos et permissions de ce groupe : </p><br /> <form name="add_groupe" method="post" > <input type="hidden" name="id" value="<?php echo $_GET['id']; ?>" /> <label for="Nom">Nom du groupe : </label><input type="text" name="Nom" value="<?php echo $donnees['nom']; ?>"/><br /> <label for="Add_article">Possibilité d'ajouter un article : </label> <select name="Add_article" id="Add_article"> <option value="add_article_oui" <?php if($selected_add_article == 1) echo 'selected="selected"'; ?>>Oui</option> <option value="add_article_non" <?php if($selected_add_article == 0) echo 'selected="selected"'; ?>>Non</option> </select><br /> <label for="Mod_article">Possibilité de modifier un article : </label> <select name="Mod_article" id="Mod_article"> <option value="mod_article_oui" <?php if($selected_mod_article == 1) echo 'selected="selected"'; ?>>Oui</option> <option value="mod_article_non" <?php if($selected_mod_article == 0) echo 'selected="selected"'; ?>>Non</option> </select><br /> <label for="Del_article">Possibilité de supprimer un article : </label> <select name="Del_article" id="Del_article"> <option value="del_article_oui" <?php if($selected_del_article == 1) echo 'selected="selected"'; ?>>Oui</option> <option value="del_article_non" <?php if($selected_del_article == 0) echo 'selected="selected"'; ?>>Non</option> </select><br /> <input type="submit" name="creer" value="Modifier le groupe de permissions !" /></form><?php } else { $nom = $_POST['Nom']; // Le nom du groupe $droits = ''; // On déclare la variable qui va contenir toutes les permissions if( $_POST['Add_article'] == 'add_article_oui') // Si dans le formulaire, on a indiqué que ce groupe pouvait ajouter un article... { $droits |= ECRIRE_ARTICLE; // On ajoute la permission dans la variable $droits } ## Mêmes actions ci-dessous avec Modifier un article et Supprimer un article ## if( $_POST['Mod_article'] == 'mod_article_oui') { $droits |= MODIFIER_ARTICLE; } if( $_POST['Del_article'] == 'del_article_oui') { $droits |= SUPPRIMER_ARTICLE; } $requete = 'UPDATE permissions SET nom = "'.$nom.'", permissions = "'.$droits.'" WHERE id = "'.htmlspecialchars($_GET['id']).'" '; // On prépare la requête $ex_requete = mysql_query($requete)or die(mysql_error()); // On exécute la requête, c'est-à-dire que l'on va changer les informations du groupe stockées dans la...

      Comparer pour mieux choisir:
      En voir plus