Bonjour à tous
Je suis actuellement en stage de développement dans une entreprise et je rencontre un petit souci.
Alors ma première mission était de réaliser un menu dont l'affichage était différent suivant le groupe auquel appartient l'utilisateur connecté.
j'ai fait ceci:
index :
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 <?php // Inclus le fichier contenant les fonctions personalisées include_once 'function.php'; // Fonction de connexion à la base de données connexion_DB('XXXX'); // Définit l'Id de la page d'accueil (1 dans cet exemple) $id_menu_accueil = 0; // Récupère l'id de la page courante passée par l'URL // Si non défini, on considère que la page est la page d'accueil if (isset($_GET['menu'])) { $_ENV['menu'] = intval($_GET['menu']); } else { $_ENV['menu'] = $id_menu_accueil; } // Extrait les informations correspondantes à la page en cours de la DB extraction_infos_DB(); <html> [..] <body> <?php echo affiche_menu(); ?> <?php deconnexion_DB(); ?> <?php // Affiche le menu en cours => id de la page = id de la page en cours. echo $_ENV['titre'] . "\n"; ?> </body> </html> ?>
et voici ma fonction affiche_menu :
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 function affiche_menu() { // On choisit le menu en fonction du groupe auquel l'utilisateur appartient $groupeTEST = $_SERVER[Groupe]; // on ajoute un ; à la fin : $groupeTEST = ' '.$groupeTEST.';'; $sql = "SELECT groupeNom FROM groupe"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); while($row = mysql_fetch_array($req)) { $result_array[] = $row['groupeNom']; } $resultat_trouve == false; // Comparaison des noms de groupes "purs" foreach($result_array as $groupeNom){ if (strpos($groupeTEST, $groupeNom.';')){ // d'où l'intêrét d'avoir rajouter un ';' ! $groupemenu = $groupeNom; $resultat_trouve == true; } } //Comparaison avec les "sous-groupes" (ex : DOSC-XXX (- DOSC-MANAGER qui est considéré comme "pur") appartiennent à DOSC) if($resultat_trouve == false) { foreach($result_array as $groupeNom){ if (strpos($groupeTEST, $groupeNom.'-')!== false){ $groupemenu = $groupeNom; } } } // On récupère le menu $sql = "SELECT g.groupeId, m.menuId, s.sousmenuId, g.groupeNom, m.menuTitre, s.sousmenuTitre FROM sousmenu s JOIN droit d ON s.sousmenuId=d.sousmenuId JOIN groupe g ON g.groupeId=d.groupeId JOIN menu m ON m.menuId = s.parent WHERE g.groupeNom IN ('$groupemenu') ORDER BY g.groupeId, m.menuId"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $catPrec = 0; // on ouvre la liste conteneur echo '<ul id="menu">'; while ($data = mysql_fetch_array($req)) { // Si on entre dans une nouvelle catégorie if ($data['menuId'] != $catPrec) { // Si cette catégorie n'est pas la première, on ferme les listes if ($catPrec != 0) { echo "</ul>"; echo "</li>"; } //Nouvelle catégorie echo "<li>"; echo "<a>"; echo $data['menuTitre']; echo "</a>"; echo "<ul>"; $catPrec = $data['menuId']; } // On affiche la ligne sousmenu : echo "<li>"; echo '<a href="index.php?menu='.$data['sousmenuId'].'">'; echo $data['sousmenuTitre']; echo "</a>"; echo "</li>"; } echo "</ul>"; echo "</li>"; // C'est fini, on ferme la liste conteneur echo "</ul>"; }
Alors tout ça marche nickel et chaque utilisateur n'a dans son menu que les sous-menu auquel il a accès.
Mais après test, je me suis rendu compte que si je fais partie du groupe A par exemple que n'a accès qu'aux menus 1, 2 et 3, ben malgré que le menu ne me propose que les menus 1, 2 et 3, si je tape "http://localhost/index.php?menu=4" ben le menu 4 va s'afficher quand meme ...
Une idée ou un conseil ?
Partager