IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Gérer les droits sur des modules !


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 42
    Points
    42
    Par défaut [SQL] Gérer les droits sur des modules !
    Bonjour à tous,
    je suis en train de développer en php un système de module, donc en gros je m'explique, on créait un droit auquel on ajoutera des modules (c'est fait et ca fonctionne), ensuite pour le code que je vais vous montrer, on récupère le droit attribué à la session puis on récupère les modules attribués au droit.

    Ensuite on dis quoi afficher, mais le problème est qu'à cause du while, g les menu qui se mettent en double voir plus tout dépend du nombre de module que ma table possède, si quelqu'un peut m'aider à résoudre ce problème je lui en serais reconnaissant :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
    $hote = 'localhost';
    $user = 'root';
    $password = '';
    $base = 'ecommerce';
     
    mysql_connect($hote,$user,$password) or die("vous n'avez pas pu vous connecter à la base de données, les identifiants sont incorrects");
    mysql_select_db($base) or die("pb de connection à la base");
     
    $session = $_SESSION['pseudo']; //login de session
     
    $slct_nom_droit = mysql_query("
    SELECT droits.nom_droit FROM droit_util
    INNER JOIN utilisateur ON droit_util.fk_utilisateur = utilisateur .id_util 
    INNER JOIN droits ON droit_util.fk_droit = droits.id_droit 
    WHERE utilisateur.login_util = '".$session."'");
    $donnees = mysql_fetch_array($slct_nom_droit);//on récupère le nmo du droit pour la session (par exemple pour la session ca sera Administrateur)
     
    $slct_module_droit = mysql_query("
    SELECT modules.nom_module
    FROM module_droits
    INNER JOIN droits ON module_droits.fk_droits = droits.id_droit
    INNER JOIN modules ON module_droits.fk_module = modules.id_module
    WHERE droits.nom_droit = '".$donnees['nom_droit']."'");//On récupère les différents modules auquel l'admin a accès (général et Utilisateurs)
    while($donnees = mysql_fetch_array($slct_module_droit))
    {
    if($donnees['nom_module'] == 'General')
    {
    ?>
    <div id="menu_entete">
    	<h4>Général</h4><!--GENERAL -->
    </div>
    <div id="menu_corps">
    	<ul>
    		<li><a href="index.php">Accueil</a></li>
    	</ul>
    </div>
    <div id="menu_pied">
    </div>
    <?php
    }	
    if($donnees['nom_module'] == 'Utilisateur')
    {
    ?>
    <div id="menu_entete">
    	<h4>Utilisateurs</h4><!-- UTILISATEUR -->
    </div>
    <div id="menu_corps">
    	<ul>
    		<li><a href="gestion_utilisateurs.php?gestion=liste">Gestion Utilisateurs</a></li>
    		<li><a href="gestion_droits.php?gestion=liste">Gestion des Droits</a></li>
    	</ul>
    </div>
    <div id="menu_pied">
    </div>
    <?php
    }
    }
    ?>

  2. #2
    Membre averti

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2004
    Messages : 220
    Points : 322
    Points
    322
    Par défaut
    Bonjour furth,

    Avant toute chose, je tiens à faire remarquer qu'il est préférable (et demandé) de rédiger plus correctement les post. Ton post est parsemé d'abréviations sms et est mal ponctué.
    Merci de faire plus attention pour les prochains.

    Merci également de fournir la structure de ta base de donnée. Je pense toutefois avoir compris ce que tu souhaitais faire.
    Je n'ai pas testé ma solution, ne disposant pas de la base. Il y a peut être des erreurs de syntaxe, mais la logique est là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
          /**
           * on recupere la liste des droits de l'utilisateur 
           */
          $slct_nom_droit = mysql_query(" 
                SELECT droits.nom_droit 
                FROM droit_util 
                INNER JOIN utilisateur 
                ON droit_util.fk_utilisateur = utilisateur .id_util 
                INNER JOIN droits ON droit_util.fk_droit = droits.id_droit 
                WHERE utilisateur.login_util = '".$session."'"
          );
          
          /* on rentre les droits dans un tableau */
          $i = 0 ;
          while( $table_droit = mysql_fetch_array($slct_nom_droit) ){
                $droit[$i] = $table_droit['nom_droit'] ;
                
                $i++ ;
          }
          
          
          /** 
           * on rentre tous les droits existant dans un tableau 
           */
          $slct_module_droit = mysql_query(" 
                SELECT modules.nom_module 
                FROM module_droits 
                INNER JOIN droits 
                ON module_droits.fk_droits = droits.id_droit 
                INNER JOIN modules 
                ON module_droits.fk_module = modules.id_module 
                WHERE droits.nom_droit = '".$donnees['nom_droit']."'"
          );
          
          /* on initialise le tableau des modules */
          $j = 0 ;
          $modules[$j] = '' ; ;
          
          /* on rentre les modules de l'utilisateur dans un tableau */
          while( $table_modules = mysql_fetch_array($slct_droit) ){
                $ok = true ;
                
                /* on regarde si module est dans la liste */
                foreach($modules as $m){
                      
                      //si le module y est
                      if($m == $table_modules['nom_module']){
                            $ok = false ; // on dit que c'est pas bon
                      }
                }
                
                /* si c'est bon, on la rajoute */
                if( $ok == true ) {
                      $modules[$j] = $table_modules['nom_module'] ;
                      $j++ ;
                }
          }
          
          /**
           * on listes les modules
           */
           echo '<ul>' ;
          foreach ($modules as $n) {
                echo '<li>'.$n.'</li>' ;
          }
          echo '<ul>' ;
    ?>
    [/quote]Colorez votre code PHP sur les forums grâce à Developpez.com
    azertyman
    "Une méthode fixe n'est pas une méthode" (Proverbe chinois)

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Merci azertyman,
    Je veillerez plus tard à ce que mes post soient plus compréhensif, je m'en vais tout de suite tester ta solution.

    Je vous tiens au courant...

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Rebonjour à tous,
    Azertyman, je viens de tester ton code, il marche à merveille.
    Je connaissais pas trop les foreach mais je vois que c'est bien puissant et je pense que ca me servira à l'avenir.

    J'aurais juste une petit question soit à toi, soit à tous, au premier qui répond .

    C'est pour la deuxième requête SQL, comment se servir du nom du droit attribué à la session récupéré dans la requête précédente, regarde mon code il t'en dira plus...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    <?php
    /**
       * on recupere la liste des droits de l'utilisateur 
       */
    $slct_nom_droit = mysql_query(" 
    		SELECT droits.nom_droit 
    		FROM droit_util 
    		INNER JOIN utilisateur 
    		ON droit_util.fk_utilisateur = utilisateur .id_util 
    		INNER JOIN droits ON droit_util.fk_droit = droits.id_droit 
    		WHERE utilisateur.login_util = '".$session."'"
    );
     
    /* on rentre les droits dans un tableau */
    $i = 0 ;
    while( $table_droit = mysql_fetch_array($slct_nom_droit) )
    {
    	$droit[$i] = $table_droit['nom_droit'] ;
    	$i++ ;
    }
     
     
      /** 
       * on rentre tous les droits existant dans un tableau 
       */
    $slct_module_droit = mysql_query(" 
    		SELECT modules.nom_module 
    		FROM module_droits 
    		INNER JOIN droits 
    		ON module_droits.fk_droits = droits.id_droit 
    		INNER JOIN modules 
    		ON module_droits.fk_module = modules.id_module 
    		WHERE droits.nom_droit = 'dje'"/*ICI, Comment récupérer le droit ??*/
    );
     
     
    /* on initialise le tableau des modules */
    $j = 0 ;
    $modules[$j] = '' ; 
     
     /* on rentre les modules de l'utilisateur dans un tableau */
    while( $table_modules = mysql_fetch_array($slct_module_droit) )
    {
    	$ok = true ;
     
    	/* on regarde si module est dans la liste */
    	foreach($modules as $m)
    	{          
    		//si le module y est
    		if($m == $table_modules['nom_module'])
    		{
    			$ok = false ; // on dit que c'est pas bon
    		}
    	}
     
    	/* si c'est bon, on la rajoute */
    	if( $ok == true ) 
    	{
    		$modules[$j] = $table_modules['nom_module'] ;
    		$j++ ;
    	}
    }
     
      /**
       * on listes les modules
       */
    echo '<ul>' ;
    foreach ($modules as $n) 
    {
    	echo '<li>'.$n.'</li>' ;
    	if($n == 'General')
    	{
    		echo 'Module <b>Général</b> affiché';
    	}
    	else if($n == 'Outils')
    	{
    		echo 'Module <b>Outils</b> affiché';
    	}
    	else if($n == 'Menu')
    	{
    		echo 'Module <b>Menu</b> affiché';
    	}
    	else if($n == 'Produit')
    	{
    		echo 'Module <b>Produit</b> affiché';
    	}
    	else if($n == 'Article')
    	{
    		echo 'Module <b>Article</b> affiché';
    	}
    	else if($n == 'Fabricant')
    	{
    		echo 'Module <b>Fabricant</b> affiché';
    	}
    	else if($n == 'Utilisateur')
    	{
    		echo 'Module <b>Utilisateur</b> affiché';
    	}
    }
    echo '<ul>' ;
    ?>

  5. #5
    Membre averti

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2004
    Messages : 220
    Points : 322
    Points
    322
    Par défaut
    Pour définir un droit précis, il faut sois définir un droit particulier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE droits.nom_droit = '.$droits[0].'
    ou sois faire la requete dans le while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( $table_droit = mysql_fetch_array($slct_nom_droit) )
    {
              ....
              'WHERE droits.nom_droit = '.$table_droit['nom_droit'].'
    }
    Le problème, c'est qu'on effectue n-requetes. Il doit y avoir une solution plus efficace.

    De plus, je ne suis pas sur que 'dje' soit un droit.
    azertyman
    "Une méthode fixe n'est pas une méthode" (Proverbe chinois)

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 42
    Points
    42
    Par défaut
    Sisi, "dje" est un droit que j'ai créer pour tester le tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR 8] Est-il possible de gérer les droits sur une table de la base
    Par foulla dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 06/01/2009, 15h16
  2. Réponses: 5
    Dernier message: 15/04/2008, 11h20
  3. [SQL] Gérer les erreurs des requêtes SQL
    Par eagleleader dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/10/2007, 13h28
  4. Gérer les droits des utilisateurs
    Par rsc dans le forum Langage
    Réponses: 6
    Dernier message: 22/08/2005, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo