Page 1 sur 1

Restricitons et redirections multiples

Posté : 14 févr. 2007, 13:07
par Neomcdn
Bonjour à tous et bonne fête à tous les amoureux! :wink:

Je suis en train de développer la partie administration du site, et pour cela je crée différents groupes d'utilisateurs: client, contributeur, administrateur.

J'ai appris avec Dreamweaver à restreindre les accès à certaines pages, cependant je ne sais pas comment rediriger en fonction du groupe d'utilisateurs lors du login.

Mon code est le suivant:

Code : Tout sélectionner

<?php require_once('Connections/administration.php'); ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['login'])) { $loginUsername=$_POST['login']; $password=$_POST['password']; $MM_fldUserAuthorization = "groupe_client"; $MM_redirectLoginSuccess = "index-administration.php"; $MM_redirectLoginFailed = "erreur_authentification.php"; $MM_redirecttoReferrer = false; mysql_select_db($database_administration, $administration); $LoginRS__query=sprintf("SELECT login, password, groupe_client FROM tbl_client WHERE login='%s' AND password='%s'", get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); $LoginRS = mysql_query($LoginRS__query, $administration) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); if ($loginFoundUser) { $loginStrGroup = mysql_result($LoginRS,0,'groupe_client'); //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?>
Pour l'instant, en cas de réussite lors du log, tout le monde est redirigé vers la page index-administration.php, quelquesoit le groupe dans lequel le loggué est inscrit.
Comment faire pour qu'en fonction du groupe on obtienne une page différente:

Code : Tout sélectionner

If { groupe_client=administrateur } else{ $MM_redirectLoginSuccess = "admin-administration.php"; If { groupe_client=contributeur } else{ $MM_redirectLoginSuccess = "contrib-administration.php"; If { groupe_client=client } else{ $MM_redirectLoginSuccess = "client-administration.php";} } }
Merci d'avance pour votre aide!

Posté : 14 févr. 2007, 16:41
par Ryle
Attention : ta syntaxe du if n'est pas bonne du tout, quant au "=" c'est l'opérateur d'affectation. La comparaison se fait avec "==" :)
if ($groupe_client=='administrateur')
  $MM_redirectLoginSuccess = "admin-administration.php"; 
else if ($groupe_client=='contributeur'
  $MM_redirectLoginSuccess = "contrib-administration.php"; 
else if ($groupe_client=='client')
  $MM_redirectLoginSuccess = "client-administration.php";
else // sinon considéré comme un échec
  $MM_redirectLoginSuccess = $MM_redirectLoginFailed;

Merci ryle!

Posté : 14 févr. 2007, 18:06
par Neomcdn
Merci beaucoup Ryle!

Effectivement, j'avais l'idée du If, mais pas sa structure. Merci pour ton aide précieuse. Ton code a en effet une meilleure allure. Merci pour tout!

Je m'en occupe!

Oops!!!

Posté : 14 févr. 2007, 18:58
par Neomcdn
Bonjour!

J'ai essayé d'intégrer ton code dans mon exemple, mais j'ai le droit à une erreur.

Mon code est le suivant (j'imagine qu'on peut le simplifier):

Code : Tout sélectionner

if ((isset($_POST['login'])) && ($groupe_client == 'administrateur')){ $loginUsername=$_POST['login']; $password=$_POST['password']; $MM_fldUserAuthorization = "groupe_client"; $MM_redirectLoginSuccess = "administration-admin.php"; $MM_redirectLoginFailed = "erreur_authentification.php"; $MM_redirecttoReferrer = true; }else{ if ((isset($_POST['login'])) && ($groupe_client == 'contributeur-histoire')){ $loginUsername=$_POST['login']; $password=$_POST['password']; $MM_fldUserAuthorization = "groupe_client"; $MM_redirectLoginSuccess = "administration-contrib-histoire.php"; $MM_redirectLoginFailed = "erreur_authentification.php"; $MM_redirecttoReferrer = true; }else{ if ((isset($_POST['login'])) && ($groupe_client == 'contributeur-actu')){ $loginUsername=$_POST['login']; $password=$_POST['password']; $MM_fldUserAuthorization = "groupe_client"; $MM_redirectLoginSuccess = "administration-contrib-actu.php"; $MM_redirectLoginFailed = "erreur_authentification.php"; $MM_redirecttoReferrer = true; }else{ if ((isset($_POST['login'])) && ($groupe_client == 'client')){ $loginUsername=$_POST['login']; $password=$_POST['password']; $MM_fldUserAuthorization = "groupe_client"; $MM_redirectLoginSuccess = "administration-client.php"; $MM_redirectLoginFailed = "erreur_authentification.php"; $MM_redirecttoReferrer = true;} else // sinon considéré comme un échec {$MM_redirectLoginSuccess = $MM_redirectLoginFailed;}
Peux-tu m'aider s'il te plaît puisqu'il semblerait que je n'ai pas intégré le code comme il fallait?

Posté : 15 févr. 2007, 04:31
par AB
Bonjour,

Difficile de te répondre puisque tu utilises ce code dans un contexte de code php généré par dreamweaver... qui génère souvent de véritables usines à gaz difficilement modifiables...

Re bonjour!

Posté : 15 févr. 2007, 10:27
par Neomcdn
Merci pour ta réponse AB!

Malheureusement pour moi, là ce n'était pas du code proposé par Dreamweaver, même si cela ressemble à une usine à gaz.

J'ai essayé d'intégrer le code de Ryle d'une autre manière (voir ci-dessous), mais j'ai eu le droit à un retour direct à l'index du site, ce qui est d'ailleurs très dangereux, puisque l'accès à tout est disponible.



Code : Tout sélectionner

<?php require_once('Connections/administration.php'); ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['login'])) { $loginUsername=$_POST['login']; $password=$_POST['password']; $MM_fldUserAuthorization = "groupe_client"; if ($groupe_client=='administrateur') $MM_redirectLoginSuccess = "admin-administration.php"; else if ($groupe_client=='contributeur' $MM_redirectLoginSuccess = "contrib-administration.php"; else if ($groupe_client=='client') $MM_redirectLoginSuccess = "client-administration.php"; else // sinon considéré comme un échec $MM_redirectLoginSuccess = $MM_redirectLoginFailed; $MM_redirectLoginFailed = "erreur_authentification.php"; $MM_redirecttoReferrer = true; mysql_select_db($database_administration, $administration); $LoginRS__query=sprintf("SELECT login, password, groupe_client FROM tbl_client WHERE login='%s' AND password='%s'", get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); $LoginRS = mysql_query($LoginRS__query, $administration) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); if ($loginFoundUser) { $loginStrGroup = mysql_result($LoginRS,0,'groupe_client'); //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && true) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?>
Faut-il adapter ce code?

Merci par avance!

Posté : 15 févr. 2007, 11:57
par Ryle
Tu as un petit soucis de chronologie... quand tu fais ton test, la variable $groupe_client est indéfinie. Il faut d'abord aller chercher en base les données de ton utilisateur, et vérifier une fois que tu les as, la page vers laquelle tu le rediriges :)

Re: Re bonjour!

Posté : 16 févr. 2007, 00:11
par AB
Merci pour ta réponse AB!

Malheureusement pour moi, là ce n'était pas du code proposé par Dreamweaver, même si cela ressemble à une usine à gaz.
Milles excuses si je me suis trompé :oops: . Les variables et fonctions commençant par MM_ me rappellent trop le code généré par Dreamweaver.

Donc tant mieux pour toi si ce n'est pas du code Dreamweaver, ça sera d'autant plus facilement modifiable et facile à optimiser :D