Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2011, 09h48   #1
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Par défaut privilège des utilisateurs -> redirection

Bonjour,

Alors pour l'instant dans ma page de connexion je fait un test sur le couple loginUtilisateur et passwordUtilisateur pour avoir accès à un menu.

Mais maintenant je veux, que selon le privilège de l'utilisateur qui se connecte via la page de connexion, lui permet d'avoir un menu différent.

Exemple :

adminisatrateur : accès à tous les liens du menu
utilisateur de base : accès restreint pour certains menu
etc...

Mon menu est affiché sur toutes les pages via un include, sauf à la page de connexion.

Ma table privilège contient :

codePrivilege clé primaire
typePrivilege
utilisateurPrivilege

Mon script de connexion :

Code :
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
if (!isset($_POST['loginUtilisateur']))
 
    {
      echo "
      <form method='post' action='index.php'>
      <TABLE>
      <TR>
      <TD>Login utilisateur</TD>      
        <TD><input type='text' name='loginUtilisateur'></TD>     
      </TR>
      <TR>
      <TD>Mot de passe</TD>       
      <TD><input type='password' name='passwordUtilisateur'></TD>      
      </TR>
      </TABLE></br>      
        <input class='bouton'' type='submit' value ='Identification'>
        <a href='formulaireMail.php'>mot de passe oublié</a>
      </form></br>
 
          ";
    }
 
else
 
    {
      $loginUtilisateur=$_POST['loginUtilisateur'];
      $passwordUtilisateur=$_POST['passwordUtilisateur'];
 
     $ligne=extraireUneLigne("select passwordUtilisateur from ccf_Utilisateur where loginUtilisateur='$loginUtilisateur'");
 
     if ($ligne)
        {if ($ligne['passwordUtilisateur']==$passwordUtilisateur)
            {
              echo "Identification réussie<br>";
              $_SESSION['loginUtilisateur']=$loginUtilisateur;
              echo"<a href='authentification.php'>Accès au menu</a>";
            }
         else
            {             
             echo "Mot de passe erroné<br>";
             echo"<a href='index.php'>Nouvel essai</a>";            
            }
        }
     else
        {
          echo "Login utilisateur inconnu<br>";
          echo"<a href='index.php'>Nouvel essai</a>"; 
        }      
   }
EDIT :

Je pensai à faire dans mon include qui affiche le menu, un test sur le privilège.
Si codePrivilege = 1 -> echo"menu1"
Si codePrivilege = 2 -> echo"menu2" etc...

Vous en pensez quoi ?

Merci de m'aider.
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 21h38   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Si tu veux un cran au dessus, tu gères tes menus dans ta base, ca te permet de les définir dans la partie données et non pas dans le code.

Il ne faut pas oublier de controler les droits dans les pages de destination.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h00   #3
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
D'accord, comment gérer les menus dans ma base ?

Et pour les droits dans les pages de destination, tu veux dire chaque pages qui affichent un menu ? ou la page du menu elle même ?

Merci
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 09h46   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Au lieu d'avoir
Code :
1
2
 
if ($droit == 1) { echo"menu1"; }
Tu aurais
Code :
1
2
$sql = "SELECT menus FROM table WHERE droit = " . $droit;
echo $resultat;
Pour la sécurité si le droit admin donne accès à un menu qui renvoi vers admin.php par exemple, il faut que dans admin.php tu vérifies à nouveau que l'utilisateur a bien le droit admin.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h28   #5
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Je préfère faire plus simple si possible.

Juste que une fois logué,

Si l'utilisateur appartient au privilège 1 -> echo menu1
Si l'utilisateur appartient au privilège 2 -> echo menu2
Si l'utilisateur appartient au privilège 3 -> echo menu3

Merci
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 10h44   #6
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Tu perd en dynamisme pour l'avenir la par contre.

Table privilege : id_priv, libelle_priv (ex: 1, admin)

clé étrangère dans utilisateur en réf à privilege.id_priv

Tu charge tes données utilisateur dont la clé étrangère :

Code :
$_SESSION['privilege'] = $req['util_id_priv'];
Code :
1
2
3
4
if($_SESSION['privilege'] == 1)
{
   echo "<a href='#'>poney</a>";
}
C'est fortement optimisable.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h07   #7
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Ma table ccf_privilege contient comme champs :

codePrivilege (ex : 1)
typePrivilege (ex : admin)
utilisateurPrivilege
(ex : administrateur)

Ma table ccf_utilisateur contient :

privilegeUtilisateur en référence à utilisateurPrivilege

Donc :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$_SESSION['privilege'] = $req['privilegeUtilisateur'];
 
if($_SESSION['privilege'] == 1)
{
   echo "<a href='accueil.php'>accueil</a>";
   echo "<a href='admin.php'>panel admin</a>";
}
 
if($_SESSION['privilege'] == 2)
{
   echo "<a href='accueil.php'>accueil</a>";
   echo "<a href='utilisateur.php'>panel utilisateur</a>";
}
 
if($_SESSION['privilege'] == 3)
{
   echo "<a href='accueil.php'>accueil</a>";
   echo "<a href='professeur.php'>panel professeur</a>";
}
Et la requête SQL ressemblerait à quoi ?

Code :
$req="SELECT utilisateurPrivilege FROM ccf_privilege WHERE ccf_privilege.utilisateurPrivilege = ccf_utilisateur.privilegeUtilisateur";
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h29   #8
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Citation:
Envoyé par mousefr Voir le message
Ma table ccf_privilege contient comme champs :

codePrivilege (ex : 1)
typePrivilege (ex : admin)
utilisateurPrivilege
(ex : administrateur)

Ma table ccf_utilisateur contient :

privilegeUtilisateur en référence à utilisateurPrivilege
typePrivilege et utilisateurPrivilege c'est de la redondance d'information limite, de plus pour des clés étrangères, travaille sur des id c'est plus optimisé, donc codePrivilege.

Code :
$req="SELECT utilisateurPrivilege FROM ccf_privilege WHERE ccf_privilege.utilisateurPrivilege = ccf_utilisateur.privilegeUtilisateur";
Tu doit avoir 2 tables dans ton from pour faire une jointure, de plus elle n'est pas necessaire.

ta requête sera du style :
Code :
SELECT privilegeUtilisateur  FROM utilisateur WHERE idUtilisateur='$id'
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h43   #9
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Là dans ta requête :

Code :
$req="SELECT privilegeUtilisateur FROM ccf_utilisateur WHERE numUtilisateur= '$id'";
Je sélectionne les privilegeUtilisateur (administrateur, consulter/modifier, consulter) ou mon numUtilisateur = $id.
Mais $id fait référence à quoi ?
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 11h45   #10
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Non non, relit mon post précédant concernant sur quoi travailler et sur la structure de tes tables.

$id est une variable de l'id utilisateur, il en faut un si ce n'est pas encore le cas.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 12h01   #11
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Alors pour la structure, j'ai supprimé utilisateurPrivilege

Donc il me reset l'id et le type
(1, admin)
(2, professeur)etc...

Après pour $id :

Code php :
1
2
3
4
$requeteId="SELECT numUtilisateur FROM ccf_utilisateur";
$result=mysql_query($requeteId);
 
$id = $result['numUtilisateur'];

C'est ça ?
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 12h17   #12
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
La première partie oui, pour l'id c'est un peu plus complexe car tu recherche a récupérer l'id de l'utilisateur de session, je m'explique :

Dans un premier temps tu vérifie l'existance du couple login/password

Ensuite tu charge l'utilisateur qui possède le couple.

Code :
SELECT * FROM utilisateur WHERE login='$login' AND password=$password
De la tu peut affecter ta session (lien)
vus que ta requête a aussi chargée l'id de l'utilisateur tu l'affecte :
Code :
$_SESSION['id_util']=$req['id_util'];
Dans ce cas ci tu as charger par ailleurs le privilège de ton utilisateur tu peut aussi l'affecter :

Code :
$_SESSION['privilege']=$req['privilege'];

Normalement à ce moment tu dispose de tout les éléments nécessaire pour gérer tes liens, tiens nous au courant.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2011, 13h23   #13
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Voilà ce que j'ai fait (sans gérer les echo des menus) :

Code :
1
2
3
$requete="SELECT * FROM ccf_utilisateur WHERE loginUtilisateur='$login' AND passwordUtilisateur='$password'";
$SESSION['numUtilisateur']=$requete['numUtilisateur'];
$SESSION['typePrivilege']=$requete['typePrivilege'];
Message d'erreur :

Notice: Undefined variable: login
Notice: Undefined variable: password

J'affecte mon loginUtilisateur à la variable $login, mais je ne l'utilise jamais...

C'est pas possible de rajouter 1 ou 2 conditions dans ma page de connexion, juste pour gérer la valeur du codePrivilege ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$loginUtilisateur=$_POST['loginUtilisateur'];
      $passwordUtilisateur=$_POST['passwordUtilisateur'];
 
     $ligne=extraireUneLigne("select passwordUtilisateur from ccf_Utilisateur where loginUtilisateur='$loginUtilisateur'");
 
     if ($ligne)
        {if ($ligne['passwordUtilisateur']==$passwordUtilisateur)
            {
              echo "Identification réussie<br>";
              $_SESSION['loginUtilisateur']=$loginUtilisateur;
              echo"<a href='authentification.php'>Accès au menu</a>";
            }
         else
            {             
             echo "Mot de passe erroné<br>";
             echo"<a href='index.php'>Nouvel essai</a>";            
            }
        }
     else
        {
          echo "Login utilisateur inconnu<br>";
          echo"<a href='index.php'>Nouvel essai</a>"; 
        }
Je suis un peu perdu
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h29.


 
 
 
 
Partenaires

Hébergement Web