[Résolu] - Php droits d'accès

- Php droits d'accès [Résolu] - PHP - Programmation

Marsh Posté le 11-03-2011 à 11:04:43    

Bonjour, je suis actuellement en train de créer un site intranet mais je rencontre quelques problèmes..
Je vous explique : j'ai créé une table membres avec id, ab_pers_matricule, login, password et droit (0 s'il n'a pas les droits d'accès et 1 s'il les a)  
 
j'ai donc un menu.php

Code :
  1. <div class="CollapsiblePanel Style10 Style11" id="CollapsiblePanel1" style="border-color: #0f1e5a; font-size: small">
  2.        <div class="CollapsiblePanelTab Style7">
  3.         <div align="center">
  4.           <p style="font-size: medium"><a href="demande.php"><u>Demande de congé et ARTT</u></a></p>
  5.         </div>
  6.       </div>
  7.       <div class="CollapsiblePanelContent Style10">
  8.         <div align="center">
  9.           <p><span class="Style24"><a href="demande.php">Saisie des absences</a></span></p>
  10.         </div>
  11.       </div>
  12.         <div class="CollapsiblePanelTab Style10">
  13.           <div align="center">
  14.            <p class="Style7" style="font-size: medium"><u></b>Suivi des absences</b></u></p>
  15.           </div>
  16.        </div>
  17.        <div class="CollapsiblePanelContent Style10">
  18.         <div align="center">
  19.           <p class="Style24"><a href="calendrier.php">Consulter mes absences</a></p>
  20.         </div>
  21.       </div>
  22.       <div class="CollapsiblePanelContent Style10">
  23.         <div align="center">
  24.           <p class="Style24">Consulter les absences</p>
  25.         </div>
  26.       </div>
  27.        <div class="CollapsiblePanelTab Style7">
  28.        <div align="center">
  29.          <p class="Style10" style="font-size: medium"><a href="parametres.php"><u>Paramètres</u></a></p>
  30.         </div>
  31.        </div>
  32.     </div>


 
 
J'aimerais faire une boucle sur Paramètres pour : Si droit = 0 alors accès refusé sinon si droit = 1 alors l'utilisateur pourra accéder aux paramètres.
 
 
Si vous avez des questions à me poser n'hésitez pas
Merci de bien vouloir m'aider !


Message édité par iOniOn95 le 23-03-2011 à 14:31:24
Reply

Marsh Posté le 11-03-2011 à 11:04:43   

Reply

Marsh Posté le 11-03-2011 à 11:30:37    

Perso j'aurais fais une vérification des droits dès l'authentification de la personne, comme ça si elle a les droits ou non tu affiches le menu que tu veux.

Reply

Marsh Posté le 11-03-2011 à 11:33:21    

C'est à dire dès l'authentification ? sur la page login j'comprend bien, mais comment faire cela ?

Reply

Marsh Posté le 11-03-2011 à 12:06:14    

Normalement lors de l'auth tu regardes si le couple login/password est bon. S'il l'est alors là tu regarde le droit de l'utilisateur et en fonction de ça tu construits ton menu.
En fait tu as juste à vérifier la valeur de la colonne droit de l'utilisateur.
 
Montre ton code sinon  ;)  

Reply

Marsh Posté le 11-03-2011 à 12:14:39    

Tout d'abord merci bcp d'essayer de m'aider ! :)
 
Je vois a peu près ce que tu veux dire mais les idées au niveau du code sont encore un peu floues..
Voici mon code :
login.php

Code :
  1. <?php
  2. // Initialisation de la session
  3. $_SESSION['erreur'] ='';
  4. $_SESSION['connexion'] = '';
  5. $host=""; // Host name
  6. $username="admin"; // Mysql username
  7. $password="admin"; // Mysql password
  8. $db_name="suivi des absences"; // Database name
  9. $tbl_name="membres"; // Table name
  10. // On vérifie que le login et le mot de passe ont été précisés
  11. if(!empty($_POST['login']) && !empty($_POST['password']))
  12. {
  13. session_start();
  14. $_SESSION['login']=$_POST['login'];
  15. // Connexion à la base
  16. $connexion=mysql_connect("$host", "$username", "$password" )or die("cannot connect" );
  17. mysql_select_db("$db_name" )or die("cannot select DB" );
  18. mysql_query("SET NAMES 'utf8'" );
  19. // Requete à la base (verification login/mdp)
  20. $SQL = 'SELECT * FROM membres WHERE login = "'.mysql_real_escape_string($_POST['login']).'" AND password = "'. mysql_real_escape_string($_POST['password']).'"';
  21. $request = mysql_query($SQL, $connexion) or die(mysql_error());
  22. $data = mysql_fetch_assoc($request);
  23. if (empty($data) || !sizeof($data)) // Login / Mot de passe invalide
  24. {
  25.  $_SESSION['erreur'] = 'Login ou mot de passe non valide';
  26.  header("Location: index.php" );
  27. }
  28. else
  29. {
  30.  $data = $data[0];
  31. // Récupération des informations de l'utilisateur dans les variables de session  
  32.  $_SESSION['connexion'] = 1;
  33. // Redirection de l'utilisateur
  34. header("Location: menu.php" );
  35. }
  36. }
  37. else // Si au moins un champs est vide
  38. {
  39. // Définition d'une erreur + Redirection
  40. $_SESSION['erreur'] = 'Tous les champs doivent être renseignés';
  41. header("Location: index.php" );
  42. }
  43. ?>


 
 
index.php
 

Code :
  1. <?php
  2. // On vérifie si une erreur a été envoyée
  3. if(isset($_SESSION['erreur']))
  4. {
  5. $erreurAffichage = $_SESSION['erreur'];
  6. }
  7. else
  8. $erreurAffichage = "";
  9. {
  10. $_SESSION['erreur'] = "";
  11. }
  12. ?>
  13.  <link rel="styles.php" type="text/css" href="styles.css" />
  14.  <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
  15.  <script type="text/javascript">
  16.  var erreur = "<?php echo $erreurAffichage; ?>";
  17.  if(erreur != "" )
  18.  {
  19.   alert(erreur);
  20.  }
  21.  </script>
  22.       <table width="324" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
  23.         <tr>
  24.           <form name="form1" method="post" action="login.php">
  25.             <td width="322"><table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
  26.                 <tr>
  27.                   <td colspan="3"><div align="center" class="Style6" style="font-weight: bold; font-size: large; font-family: Geneva, Arial, Helvetica, sans-serif">                   
  28.                     <p><u><span style="font-size: x-large">Accès membres</span></u><br />
  29.                     </p>
  30.                     </div></td>
  31.                 </tr>
  32.                 <tr>
  33.                   <td width="122"><div align="right" class="Style6" style="font-weight: bold; font-size: medium; font-family: Geneva, Arial, Helvetica, sans-serif">Identifiant :</div></td>
  34.                   <td width="167"><div align="center" class="Style6" style="font-weight: bold; font-size: large; font-family: Geneva, Arial, Helvetica, sans-serif">
  35.                       <input name="login" type="text" id="login" />
  36.                   </div></td>
  37.               </tr>
  38.                 <tr>
  39.                   <td><div align="right" class="Style6" style="font-weight: bold; font-size: medium; font-family: Geneva, Arial, Helvetica, sans-serif">Mot de passe :</div></td>
  40.                   <td><div align="center" class="Style6" style="font-weight: bold; font-size: large; font-family: Geneva, Arial, Helvetica, sans-serif">
  41.                       <input name="password" type="password" id="password" />
  42.                   </div></td>
  43.                 </tr>
  44.                 <tr>
  45.                   <td></td>
  46.                   <td><div align="center" class="Style6" style="font-weight: bold; font-size: medium">
  47.                       <p><input type="submit" name="Submit" value="Connexion" /><br /></p>
  48.                   </div></td>
  49.                 </tr>
  50.             </table></td>
  51.           </form>
  52.         </tr>
  53.       </table>


 
De plus, je viens de me rendre compte que j'ai 2 autres petits soucis : tout d'abord lorsque je tape le bon login et un faux password, j'arrive quand même à me connecter..  
Et ensuite, pour les messages d'erreur $_SESSION['erreur'] = ""; il ne m'affiche pas le type d'erreur ('Login ou mot de passe non valide'  Ou  'Tous les champs doivent être renseignés') il me renvoye directement sur l'index.. :S
 
 

Reply

Marsh Posté le 11-03-2011 à 12:18:17    

Déjà tu initialises deux variables de sessions ($_SESSION['erreur'] =''; et $_SESSION['connexion'] =''; sans lancer le session_start() avant.
 
Donc place le session_start() au début de ton code.
 
Sinon dans ton script une fois l'utilisateur logué, tu dois pouvoir afficher $data[x] où x sera le numéro du champ "droit" de ta table. Et là tu fais un switch sur cette valeur. Si elle vaut 1 alors tu fais "header("Location: menu_avec_droit.php" );" et s'il n'a pas les droits "header("Location: menu_sans_droits.php" );"
 


Message édité par Profil supprimé le 11-03-2011 à 12:26:51
Reply

Marsh Posté le 11-03-2011 à 12:30:13    

Pour le premier petit soucis, ca y est ça fonctionne !  
Ensuite pour le champ 'droit', dans menu je ne vois pas comment dire que si le membre connecté a les droit il peut accéder aux paramètres (ou l'inverse s'il na pas les droits il ne peut pas)
Désolée je suis débutante donc j'ai un peu de mal ^^

Reply

Marsh Posté le 11-03-2011 à 12:59:33    

excuse moi mai ton code est un peu tous mélanger je trouve a mon gout lol
 
voici quelque erreur que je constate si je peu me premettre
donc on va commencer par login.php
 
1) je voi 2 variable $_session['erreur'] et $_session['connexion'] en debut de page sans un session_star() avant
 
2) tu demarre et enregistre 2 session importante   $_session['login'] et  $_session['pasword'] avant meme de savoir si le membre a entré les bons identifiants (sa c'est trop risqué!!!)
 
3) il n'y a aucun interet de mettre les erreur de login et password en session le mieux serai de les afficher dans la meme page ou par un exit(). exemple: exit('Une erreur est survenu');
ou alor tu incremente tes erreur exmple :
 

Code :
  1. $ErreurNb=0;
  2. $LOGIN='';
  3. if(empty($_POST['login'])){
  4.  
  5.     $LOGIN='';
  6.     $ERREUR1='Veuillez saisir votre login';
  7.     $ErreurNb++;
  8. }
  9. else{
  10.       $LOGIN=$_POST['login'];
  11. }
  12. //... et tu en fait ainsi avec toute les variable atester une foi verifier toute les variable tu rajoute la ligne si dessou.
  13. if($ErreurNb==0){
  14.   //et la tu fais ta requette
  15. }
  16. else{
  17.    echo 'une erreur inconnu s'est produite veuillez rééssayer';
  18. }


 
j'ai oublier je voi aussi que dans ta page index.php une erreur s'affiche en javascript ba la aussi c'est pas une tres bonne idée il sufit que le membre le desactive et hop plus d'erreur lol
 
voila en esperant t'avoir un peut aider mai si tu a des soucis ou des question ou quoi que ce soit n'esite surtout pas a +++  :)


Message édité par keusty78 le 11-03-2011 à 13:47:47
Reply

Marsh Posté le 11-03-2011 à 13:24:43    

iOniOn95 a écrit :

Pour le premier petit soucis, ca y est ça fonctionne !  
Ensuite pour le champ 'droit', dans menu je ne vois pas comment dire que si le membre connecté a les droit il peut accéder aux paramètres (ou l'inverse s'il na pas les droits il ne peut pas)
Désolée je suis débutante donc j'ai un peu de mal ^^


 
Pour donner des droi a tes utilisateur il faut que dans ta table ou les membre son enregistrer tu rajoute un champ que tu nomme par exemple droit et tu lui met comme valeur par defaut 0 si il n'a pas les droits ou 1 si il les a.
 
apres  tu cree une requette comme ceci :
 

Code :
  1. $SqlVerif=mysql_query("SELECT(*) FROM membre WHERE login='".mysql_real_escap_string($_SESSION['login'])."' AND droit=1" );
  2. $ResVerif=mysql_fetch_assoc($SqlVerif);
  3. if(!$ResVerif){
  4. echo 'Vous n'avez pas les droit pour acceder a cette rubrique';
  5. }
  6.   else{
  7.        echo vous avez les droit adequate vous pouvez acceder a cette rubrique
  8.     }


 
 

Reply

Marsh Posté le 11-03-2011 à 14:07:07    

Merci pour tes conseils et précisions :)
j'ai donc modifié l'emplacement de session_start() et enlevé les $_SESSION['erreur'] et $_session['connexion'] :)
Ensuite pour la requête que tu as écrite, je la comprend bien mais ou dois-je la placer dans mon code pour que celle ci fonctionne ? j'ai déjà rajouté un champ "droit" avec comme valeur par défaut 0 et 1 pour ceux qui ont les droits.
 
Je me posais une question, est ce que ta façon de donner l'accès ou pas à des membres est bonne sachant que le membre passera par login.php (pour s'enregistrer), ensuite dirigé dans le menu.php, puis ensuite dans paramètre.php (et là il pourra y accéder ou non selon son droit).
Se ne serais pas plus pratique de bloquer l'accès directement sur la page parametre.php  (si l'user n'a pas les droits) plutôt que sur la page login? Je ne sais pas si tu comprend bien ce que je veux expliquer par là car je ne trouve pas les mots pour expliquer clairement !
 
car selon ton exemple, après la page de connexion (login.php), il affichera "vous avez les droits pour acceder à cette page" (ou non) au lieu d'être redirigé dans menu.php
 
 

Reply

Marsh Posté le 11-03-2011 à 14:07:07   

Reply

Marsh Posté le 11-03-2011 à 21:55:56    

oui san oublier de mettre droi en session

Message cité 1 fois
Message édité par keusty78 le 11-03-2011 à 22:19:21
Reply

Marsh Posté le 11-03-2011 à 22:17:58    

keusty78 a écrit :


 
 
oui elle sera exacte j'ai seulement oublier de te preciser que la valeur du champ "droit"  doi etre enregistrer dans une session que tu verifira dans toute les page ou tu demande des droi d'acces je vai te faire un exemple :
 
ta page login.php :

Code :
  1. $SqlRequette=mysql_query("SELECT login,pass,droi FROM membre WHERE login='".$Login."' AND pass='".$Password."'" );
  2.     $ResRequette=mysql_fetch_assoc($SqlRequette);
  3.    
  4.    if(! $ResRequette){
  5.  
  6.       echo 'Verifiez vos identifiant';
  7. else{
  8.        session_start();
  9.        $_SESSION['Login']=$ResRequette['login']; //-----------------------donc la j'ai enregistrer login et droi en session pour cette exemple donc avec session_start() sur toute tes page tu n'aura pas de mal
  10.        $_SESSION['droi']=$ResRequette['login'];   //-----------------------a verifier les droi des membre tu teste ta variable comme ce :
  11. }                                                              //-----------------------if($_SESSION['droi']==0){
  12.                                                                //-----------------------echo 'pas de droi';
  13.                                                                //-----------------------}
  14.                                                             //----------------------else{
  15.                                                                //---------------------- echo droi
  16.                                                                //----------------------}

 
 
donc pour repondre a ta question l'utisateur n'aura pas acces si tu teste SESSION['droi'] sur tes page mai si tu veu faire des redirection remplace simpement les echo par des header() voila en esperan t'avoir aider car moi aussi j'ai un peu de mal a etre claire lol en tou ka si ya un probleme n'esite pas on es la  :)  
 


Message édité par keusty78 le 12-03-2011 à 00:08:14
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed