Problème de user, droit, groupe

Problème de user, droit, groupe - PHP - Programmation

Marsh Posté le 03-08-2006 à 14:00:40    

Bonjour,  
 
c'est encore pour la meme page, j'ai fait pas mal de recherche. J'ai trouvé ça mais j'ai du mal à l'exécuter pour moi.
 
Un user peut appartenir à plusieurs groupes et qui eux-mêmes ont des droits différents.
Solution :  appliquer un masque (OR ou AND en fct du besoin) et ceux pour chaque droit en combinaison de
groupe.
 
En clair :
Pour un utilisateur :
NOM Droit1 Droit2 Droit3 Droit4 Droit5
grp1    0       1       1       0        1
grp2    1       1       0       0        1
---------------------------------------------------------------------
maskOR 1 1 1 0 1
 
 
while ( conditions, itérations des groupes pour un user ....) {
 
$DroitGlobal1 |= $droit1DuGroupe_i;
$DroitGlobal2 |= $droit2DuGroup_i;
etc...
$i++
}
 
Voici mon code à l'origine : COmment je peux faire pour intégrer ce qu'il y a au dessus?

Code :
  1. if (isset($HTTP_GET_VARS['act']))
  2. {
  3. $wlog=$HTTP_GET_VARS['act'];
  4. }
  5. else
  6. {
  7.  $wlog='';
  8. }
  9. //vérification du login et mot de passe
  10. if ($wlog=='log')
  11. {
  12. $wlogin='';
  13. $wpass='';
  14. if(isset($HTTP_POST_VARS['uti_login']))
  15.  {
  16.  $wlogin=$HTTP_POST_VARS['uti_login'];
  17.  }
  18. if(isset($HTTP_POST_VARS['uti_pass']))
  19.  {
  20.  $wpass=$HTTP_POST_VARS['uti_pass'];
  21.  }
  22. $sql = " SELECT utilisateurs.uti_cle, utilisateurs.uti_nom, utilisateurs.uti_prenom, grputi.grp_cle, grp_vis, grp_adm, grp_dir, grp_bod, grp_arc, grp_asc, grp_sob, grp_sca, grp_maf, grp_vir, grp_fle, grp_ale, grp_arg, grp_val, grp_qsca FROM liengrp INNER JOIN utilisateurs ON utilisateurs.uti_cle=liengrp.uti_cle INNER JOIN grputi ON grputi.grp_cle=liengrp.grp_cle WHERE uti_login='".$wlogin."' and uti_pass='".$wpass."' ";
  23. $qry = pg_query($conn, $sql);
  24. //$qry2 = pg_query($conn, $sql);
  25. $individu = pg_fetch_object($qry);
  26. //si la requete est vide alors mot de passe ou login incorrect
  27. if (!$individu)
  28.  {
  29.  header("Location:adm_login.php?m=1" );
  30.  exit();
  31.  }
  32. //sinon on ouvre la session avec ses caractéristiques
  33.  else
  34.   {
  35.   //while ($individu = pg_fetch_object($qry2))
  36.    //{
  37.    $_SESSION['ses_nom']=$individu->uti_nom;
  38.    $_SESSION['ses_prenom']=$individu->uti_prenom;
  39.    $_SESSION['ses_grp_cle']=$individu->grp_cle;
  40.    $_SESSION['ses_grp_vis']=$individu->grp_vis;
  41.    $_SESSION['ses_grp_adm']=$individu->grp_adm;
  42.    $_SESSION['ses_grp_dir']=$individu->grp_dir;
  43.    $_SESSION['ses_grp_bod']=$individu->grp_bod;
  44.    $_SESSION['ses_grp_arc']=$individu->grp_arc;
  45.    $_SESSION['ses_grp_asc']=$individu->grp_asc;
  46.    $_SESSION['ses_grp_sob']=$individu->grp_sob;
  47.    $_SESSION['ses_grp_sca']=$individu->grp_sca;
  48.    $_SESSION['ses_grp_maf']=$individu->grp_maf;
  49.    $_SESSION['ses_grp_vir']=$individu->grp_vir;
  50.    $_SESSION['ses_grp_fle']=$individu->grp_fle;
  51.    $_SESSION['ses_grp_ale']=$individu->grp_ale;
  52.    $_SESSION['ses_grp_arg']=$individu->grp_arg;
  53.    $_SESSION['ses_grp_val']=$individu->grp_val;
  54.    $_SESSION['ses_grp_qsca']=$individu->grp_qsca;
  55.    $_SESSION['ses_log']='oui';
  56.    //echo '<tr><td>'.$individu->grp_adm.''.$individu->grp_vis.''.$individu->grp_sca.'</td></tr><br>';
  57.    //}
  58.   }
  59. }

Reply

Marsh Posté le 03-08-2006 à 14:00:40   

Reply

Marsh Posté le 03-08-2006 à 14:18:35    

Je ne sais pas, à toi de nous le dire. C'est un peu vague comme question. Peux-tu être un peu plus précis ?
 
Sinon si tu veux travailler tes permissions avec des opérateurs logiques, tu peux utiliser des valeurs en hexadécimal ;)

Reply

Marsh Posté le 03-08-2006 à 14:28:07    

C'est la même chanson ....  [:atsuko]  
Tu ne remontes que le 1er resultat de ta requete utilisateur/groupe, donc tu n'as les permissions que du 1er groupe.
Commence par faire une boucle sur les resultats, et dedans traite les problèmes de droit.


Message édité par anapajari le 03-08-2006 à 14:28:18
Reply

Marsh Posté le 03-08-2006 à 14:28:31    

J'ai déjà fait un poste pour cette page qui bloque et m'enquiquine. La voici en entier vous aller peut-être mieux comprendre. Actuellement si j'execute ma première requete je n'ai qu'une ligne de résultats qui s'affiche donc il ne prend en compte que les droits d'un groupe alors que le user appartient à 2 groupes. C'est pour cette raison que j'ai essayer de faire une boucle. Mais sans succès. En cherchant sur le web j'ai trouvé ce qu'il y a au-dessus... Je me dis que c'est peut être une solution, mais je n'arrive pas à l'éxécuter pour moi (je débute et galère pas mal)

Code :
  1. <?php
  2. session_start();
  3. //connexion au serveur
  4. require('adm_fonctions.php');
  5. $conn = g_connect();
  6. $webmaster="";
  7. //savoir d'où on revient
  8. if (isset($HTTP_GET_VARS['act']))
  9. {
  10. $wlog=$HTTP_GET_VARS['act'];
  11. }
  12. else
  13. {
  14.  $wlog='';
  15. }
  16. //vérification du login et mot de passe
  17. if ($wlog=='log')
  18. {
  19. $wlogin='';
  20. $wpass='';
  21. if(isset($HTTP_POST_VARS['uti_login']))
  22.  {
  23.  $wlogin=$HTTP_POST_VARS['uti_login'];
  24.  }
  25. if(isset($HTTP_POST_VARS['uti_pass']))
  26.  {
  27.  $wpass=$HTTP_POST_VARS['uti_pass'];
  28.  }
  29. $sql = " SELECT utilisateurs.uti_cle, utilisateurs.uti_nom, utilisateurs.uti_prenom, grputi.grp_cle, grp_vis, grp_adm, grp_dir, grp_bod, grp_arc, grp_asc, grp_sob, grp_sca, grp_maf, grp_vir, grp_fle, grp_ale, grp_arg, grp_val, grp_qsca FROM liengrp INNER JOIN utilisateurs ON utilisateurs.uti_cle=liengrp.uti_cle INNER JOIN grputi ON grputi.grp_cle=liengrp.grp_cle WHERE uti_login='".$wlogin."' and uti_pass='".$wpass."' ";
  30. $qry = pg_query($conn, $sql);
  31. //$qry2 = pg_query($conn, $sql);
  32. $individu = pg_fetch_object($qry);
  33. //si la requete est vide alors mot de passe ou login incorrect
  34. if (!$individu)
  35.  {
  36.  header("Location:adm_login.php?m=1" );
  37.  exit();
  38.  }
  39. //sinon on ouvre la session avec ses caractéristiques
  40.  else
  41.   {
  42.   //while ($individu = pg_fetch_object($qry2))
  43.    //{
  44.    $_SESSION['ses_nom']=$individu->uti_nom;
  45.    $_SESSION['ses_prenom']=$individu->uti_prenom;
  46.    $_SESSION['ses_grp_cle']=$individu->grp_cle;
  47.    $_SESSION['ses_grp_vis']=$individu->grp_vis;
  48.    $_SESSION['ses_grp_adm']=$individu->grp_adm;
  49.    $_SESSION['ses_grp_dir']=$individu->grp_dir;
  50.    $_SESSION['ses_grp_bod']=$individu->grp_bod;
  51.    $_SESSION['ses_grp_arc']=$individu->grp_arc;
  52.    $_SESSION['ses_grp_asc']=$individu->grp_asc;
  53.    $_SESSION['ses_grp_sob']=$individu->grp_sob;
  54.    $_SESSION['ses_grp_sca']=$individu->grp_sca;
  55.    $_SESSION['ses_grp_maf']=$individu->grp_maf;
  56.    $_SESSION['ses_grp_vir']=$individu->grp_vir;
  57.    $_SESSION['ses_grp_fle']=$individu->grp_fle;
  58.    $_SESSION['ses_grp_ale']=$individu->grp_ale;
  59.    $_SESSION['ses_grp_arg']=$individu->grp_arg;
  60.    $_SESSION['ses_grp_val']=$individu->grp_val;
  61.    $_SESSION['ses_grp_qsca']=$individu->grp_qsca;
  62.    $_SESSION['ses_log']='oui';
  63.    //echo '<tr><td>'.$individu->grp_adm.''.$individu->grp_vis.''.$individu->grp_sca.'</td></tr><br>';
  64.    //}
  65.   }
  66. }
  67. //verifie la connexion
  68. else
  69.  {
  70.  if (!verif_connect)
  71.   {
  72.   exit();
  73.   }
  74.  }
  75. $sql = " SELECT cat_cle, cat_lib FROM categorie ";
  76. $qry = pg_query($conn, $sql);
  77. $result = pg_fetch_object($qry);
  78. ?>
  79. <html>
  80. <head>
  81. <title>Espace dédié à l'administrateur</title>
  82. <!-------------------------- Fichiers liés pour aérer code -->
  83. <link href="../css/style_admin.css" rel="stylesheet" type="text/css">
  84. <link href="../css/style.css" rel="stylesheet" type="text/css">
  85. <script type="text/javascript" src="../css/javascript.js"></script>
  86. </head>
  87. <body>
  88. <table width="90%" align="center" height="100%" border="1" bordercolor="#CCCCCC" cellpadding="0" cellspacing="0">
  89. <tr valign="top">
  90.  <td>
  91. <!-------------------------- Tableau pour l'en-tete -->
  92.   <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#333399">
  93.    <tr>
  94.     <td>
  95.      <a href="../public/accueil.php">
  96.       <img src="../img/logo_net.jpg" alt="Accueil" border="0">
  97.      </a>
  98.     </td>
  99.    </tr>
  100.    <tr>
  101.     <td width="33%" align="center">
  102.      <font color="#CCCCCC" face="Arial, Helvetica, sans-serif" size="2">Bienvenue <?=$_SESSION['ses_prenom'];?> <?=$_SESSION['ses_nom'];?></font>
  103.     </td>
  104.     <td width="33%" align="center">
  105.      <font color="#CCCCCC" face="Arial, Helvetica, sans-serif" size="2"><strong>ESPACE ADMINISTRATEUR </strong></font>
  106.     </td>
  107.     <td width="33%" align="center">
  108.     <?php echo "<a href=\"adm_login.php?m=3\"><img src=\"../img/deconnexion.jpg\" border=\"0\" alt=\"déconnexion\"></a>" ?>
  109.     </td>
  110.     </tr>
  111.     <tr>
  112.    <td height="5"></td>
  113.     </tr>
  114.   </table>
  115.   <table width="100%" height="79%" border="0" cellpadding="0" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333399">
  116.    <tr valign="top">
  117.     <td width="25%">
  118. <!-------------------------- Tableau pour agir -->
  119.      <table width="80%" align="center" bgcolor="#CCCCCC">
  120.       <?
  121.       if ($_SESSION['ses_grp_adm']==1)
  122.        {
  123.       ?>
  124.       <tr>
  125.        <td align="left" id="rubrique">Base de données</td>
  126.       </tr>
  127.       <tr>
  128.        <td align="left" id="sousrubrique">
  129.         <a href="adm_listgrp.php" target="contenu">Groupes</a><br>
  130.         <a href="adm_listliengrp.php" target="contenu">Appartenance à 1 groupe</a><br>
  131.         <a href="adm_listmarq.php" target="contenu">Marques</a><br>
  132.         <a href="adm_listfil.php" target="contenu">Filiales</a><br>
  133.         <a href="adm_listconc.php" target="contenu">Concessions</a><br>
  134.         <a href="adm_listfonc.php" target="contenu">Fonctions</a><br>
  135.         <a href="adm_listlienfonc.php" target="contenu">Multi-fonctions</a><br>
  136.         <a href="adm_listuti.php" target="contenu">Utilisateurs</a><br>
  137.         <a href="adm_listcat.php" target="contenu">Catégorie de documents</a><br>
  138.         <a href="adm_listscat.php" target="contenu">Sous Catégorie de documents</a><br>
  139.         <a href="adm_listflash.php" target="contenu">Flash Infos</a><br>
  140.         <a href="adm_listcand.php" target="contenu">Candidatures</a>
  141.        </td>
  142.       </tr>
  143.       <tr>
  144.        <td align="left" id="rubrique">Messages</a></td>
  145.       </tr>
  146.       <tr>
  147.        <td align="left" id="sousrubrique">
  148.         <a href="adm_listmess.php" target="contenu">Voir la liste</a><br>
  149.         <a href="adm_mess.php?act=c" target="contenu">Créer un message</a>
  150.        </td>
  151.       </tr>
  152.       <tr>
  153.        <td align="left" id="rubrique">Bodemer Infos</td>
  154.       </tr>
  155.       <?
  156.       $sql2 = $sql . " WHERE cat_cle < 8 ORDER BY cat_lib DESC ";
  157.       $qry2 = pg_query($conn, $sql2);
  158.       while ($result = pg_fetch_object($qry2)){
  159.       ?>
  160.       <tr>
  161.        <td align="left" id="sousrubrique">
  162.         <a href="adm_listdoc.php?cat=<?=$result->cat_cle?>" target="contenu"><?=$result->cat_lib?></a>
  163.        </td>
  164.       </tr>
  165.       <? } ?>
  166.       <tr>
  167.        <td align="left" id="rubrique">Système Management</td>
  168.       </tr>
  169.       <?
  170.       $sql3 = $sql . " WHERE cat_cle > 7 and cat_cle < 19 ORDER BY cat_cle ASC ";
  171.       $qry3 = pg_query($conn, $sql3);
  172.       while ($result = pg_fetch_object($qry3)){
  173.       ?>
  174.       <tr>
  175.        <td align="left" id="sousrubrique">
  176.         <a href="adm_listdoc.php?cat=<?=$result->cat_cle?>" target="contenu"><?=$result->cat_lib?></a>
  177.        </td>
  178.       </tr>
  179.       <? } ?>
  180.       <?
  181.        }
  182.        if (($_SESSION['ses_grp_dir']==1)||($_SESSION['ses_grp_adm']==1))
  183.        {
  184.       ?>
  185.       <tr>
  186.        <td align="left" id="rubrique">Avancement des commandes</td>
  187.       </tr>
  188.       <tr>
  189.        <td align="left" id="sousrubrique">
  190.         <a href="adm_listcomd_srub.php" target="contenu">Sous-Rubrique</a><br>
  191.         <a href="adm_listcomd_obj.php" target="contenu">Objectifs</a><br>
  192.         <a href="adm_listcomd_donnee.php" target="contenu">Données</a><br>
  193.       <? } ?>
  194.        </td>
  195.       </tr>
  196.             <?php
  197.       if ($_SESSION['ses_grp_sca']==1)
  198.        {
  199.        $sql = " SELECT cat_lib, scat_cle, scat_lib FROM souscategorie INNER JOIN categorie ON scat_categorie=cat_cle WHERE cat_cle=24 ORDER BY scat_cle ASC ";
  200.        $qry = pg_query($conn,$sql);
  201.        $oldcat = '';
  202.        while ($result = pg_fetch_assoc($qry))
  203.         {
  204.         if ($oldcat != $result['cat_lib'])
  205.          {
  206.          if ( $oldcat != '' )
  207.           {
  208.       ?>
  209.       <?
  210.           }
  211.       ?>
  212.       <tr>
  213.        <td align="left" id="rubrique"><?=$result['cat_lib']?></td>
  214.       </tr>
  215.       <tr>
  216.        <td align="left" id="sousrubrique">
  217.        <?
  218.          }
  219.        ?>
  220.        <a href="adm_listeve.php?scat=<?=$result['scat_cle']?>" target="contenu"><?=$result['scat_lib']?></a><br>
  221.        <?
  222.         $oldcat = $result['cat_lib'];
  223.         }
  224.        ?>
  225.        </td>
  226.       </tr>
  227.       <?
  228.        }
  229.       ?>
  230.      </table>
  231.     </td>
  232.     <td width="75%" height="70%" bgcolor="#FFFFFF" align="center">
  233.      <iframe src="vide.php" name="contenu" width="100%" height="100%" align="top" frameborder="0"></iframe>
  234.     </td>
  235.    </tr>
  236.   </table>
  237.  </td>
  238. </tr>
  239. </table>
  240. </body>
  241. </html>


 
 

AlphaZone a écrit :

Sinon si tu veux travailler tes permissions avec des opérateurs logiques, tu peux utiliser des valeurs en hexadécimal ;)


 
Comment ça?

Reply

Marsh Posté le 03-08-2006 à 14:44:45    

jenny50 a écrit :

Actuellement si j'execute ma première requete je n'ai qu'une ligne de résultats qui s'affiche donc il ne prend en compte que les droits d'un groupe alors que le user appartient à 2 groupes.


Je reprends ton code ( pour la 10eme fois):

Code :
  1. $sql = " SELECT ...";
  2. $qry = pg_query($conn, $sql);


C'est vraiment vraiment suprenant que tu n'aies que le 1er résultat  :sweat:  
 

jenny50 a écrit :

C'est pour cette raison que j'ai essayer de faire une boucle. Mais sans succès. En cherchant sur le web j'ai trouvé ce qu'il y a au-dessus... Je me dis que c'est peut être une solution, mais je n'arrive pas à l'éxécuter pour moi (je débute et galère pas mal)


Bin montre nous le code avec la boucle alors [:spamafote]
 
Par ailleurs, je t'ai expliqué hier ( ici ) comment reprendre ton script proprement. Tu veux toujours pas le faire, et bin c'est normal que ça fasse n'importe quoi  [:roane]  
 

Reply

Marsh Posté le 03-08-2006 à 14:51:48    

Pour reprendre ton exemple :

Citation :

NOM Droit1 Droit2 Droit3 Droit4 Droit5
grp1    0       1       1       0        1
grp2    1       1       0       0        1
---------------------------------------------------------------------
maskOR 1 1 1 0 1


 
grp1 en hexa donne : 0x0D
grp2 en hexa donne : 0x19
 
Tu fais  

Code :
  1. 0x0D & 0x19


 
Si je me trompe pas, tu obtiens

Code :
  1. 0x1D


Qui correspond à ton résultat : 0001 1101

Reply

Marsh Posté le 03-08-2006 à 15:20:37    

JE LAISSE TOMBER CA ME SOULE J'Y COMPREND PLUS RIEN !!!!
 
MERCI DE VOTRE AIDE
JE VOUS LAISSE TRANQUILLE

Reply

Marsh Posté le 03-08-2006 à 15:29:28    

LoL, ca ne sert à rien de s'énerver. Commence par faire quelques tests, les plus basiques, sans te préoccuper de la mise en forme.
 
A chaque fois que tu réussi un test, augmente la difficulté jusqu'à obtenir le résultat que tu souhaite. C'est chiant, je l'avoue mais ca permet de voir ou ça coince et puis ca permet de voir ses erreurs.
 
Maintenant si tu ne veux pas continuer, c'est ton problème.
 
@ bientot peut être ;)

Reply

Marsh Posté le 03-08-2006 à 15:50:29    

Alors j'ai repris tout je teste. Voici le meme code avec ma boucle.

Code :
  1. while ($individu = pg_fetch_object($qry2))
  2.    {
  3.    $_SESSION['ses_nom']=$individu->uti_nom;
  4.    $_SESSION['ses_prenom']=$individu->uti_prenom;
  5.    $_SESSION['ses_grp_cle']=$individu->grp_cle;
  6.    $_SESSION['ses_grp_vis']=$individu->grp_vis;
  7.    $_SESSION['ses_grp_adm']=$individu->grp_adm;
  8.    $_SESSION['ses_grp_dir']=$individu->grp_dir;
  9.    $_SESSION['ses_grp_bod']=$individu->grp_bod;
  10.    $_SESSION['ses_grp_arc']=$individu->grp_arc;
  11.    $_SESSION['ses_grp_asc']=$individu->grp_asc;
  12.    $_SESSION['ses_grp_sob']=$individu->grp_sob;
  13.    $_SESSION['ses_grp_sca']=$individu->grp_sca;
  14.    $_SESSION['ses_grp_maf']=$individu->grp_maf;
  15.    $_SESSION['ses_grp_vir']=$individu->grp_vir;
  16.    $_SESSION['ses_grp_fle']=$individu->grp_fle;
  17.    $_SESSION['ses_grp_ale']=$individu->grp_ale;
  18.    $_SESSION['ses_grp_arg']=$individu->grp_arg;
  19.    $_SESSION['ses_grp_val']=$individu->grp_val;
  20.    $_SESSION['ses_grp_qsca']=$individu->grp_qsca;
  21.    $_SESSION['ses_log']='oui';
  22.    echo '<tr><td>'.$individu->grp_adm.''.$individu->grp_vis.''.$individu->grp_sca.'</td></tr><br>';
  23.    }
  24.   }


Mon echo m'affiche bien 2 lignes de résultat de cette manière :  

Code :
  1. 110
  2. 011


 
Maintenant il faut que je traite mes droits, c'est là que je ne comprend pas l'histoire d'itération de mon premier poste pour faire en sorte qu'il n'affiche que ça : 111

Reply

Marsh Posté le 03-08-2006 à 15:52:50    

tu sommes tes colonnes en faisant +1 module 2

Reply

Marsh Posté le 03-08-2006 à 15:52:50   

Reply

Marsh Posté le 03-08-2006 à 15:58:27    

hein???  Je suis vraiment désolé je ne comprend pas. Quelles colonnes et quel module?

Reply

Marsh Posté le 03-08-2006 à 17:37:11    

jenny50 a écrit :

Mon echo m'affiche bien 2 lignes de résultat de cette manière :  

Code :
  1. 110
  2. 011


 
Maintenant il faut que je traite mes droits, c'est là que je ne comprend pas l'histoire d'itération de mon premier poste pour faire en sorte qu'il n'affiche que ça : 111


 
Il faut que tu trouve une solution pour convertir tes 1 et 0 en un nombre en hexadécimal.
Une fois que tu as cette valeur hexa, tu applique une convertion logique avec l'opérateur | (OR) ou & (ET) ou ^ (XOR) selon le résultat désiré.
Pour information, le OU force à 1 et le ET force à 0. C'est à savoir.
Donc ici tu veux obtenir un résultat 111 avec les valeurs 110 et 011. Il te faudra donc utiliser l'opérateur OU.
 
Voici un exemple par rapport à tes valeurs :

Code :
  1. $val1 = 0x6; // Valeur correspondant à 110
  2. $val2 = 0x3; // Valeur correspondant à 011
  3. $resultat = $val1 | $val2;
  4. printf("%X", $resultat);


 
J'espère que mes explications t'aurons aidées dans la compréhension du traitement de tes données.

Reply

Marsh Posté le 03-08-2006 à 18:03:32    

ptain mais c'est compliqué pour rien non ?
Tu sommes par colonnes, tu regardes si à la fin c'est supérieur à 0, si oui  il a les droits, sinon  il les a pas[:spamafote]

Reply

Marsh Posté le 04-08-2006 à 12:26:26    

avant d'essaie de coder, reflechi à l'algo, tu veras que c'est pas bien dur.

Reply

Sujets relatifs:

Leave a Replay

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