Page 1 sur 1

authorisation admin class.auth.php

Posté : 11 sept. 2011, 10:53
par valdsr
Bonjour, tous! J-ai un souci que je n'arrive pas à résoudre,
j'ai fais suivi un tutorial sur grafikart sur la création d'une page membre et admin
j'ai posé déjà la question sur ce forum
http://www.grafikart.fr/forum/topic/2360
mais n’ayant pas eu de réponse je post donc mon problème.
voilà j'ai tout comme il faut mais la page admin est supposé ne pas étre accessible mais ce n'est pas le cas, je peux y accéder meme si je ne suis pas logguer, et en étant membre simple je peux aussi logguer à cette page. Voici mes codes (tout dans le meme dossier):
la page index.php :
<?php
session_start();

try{
  $PDO = new PDO('mysql:host=localhost;dbname=tuto','root','');
  $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
  $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
}catch(PDOException $e){
  echo'Connexion impossible';
}
  
  

//Class Auth
require_once "class.auth.php";

ob_start();
include((isset($_GET['p'])?$_GET['p']:'home').'.php');
$content_for_layout = ob_get_clean();
?>
<!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Strict/EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>

<body>
<div id="conteneur">
<?php if($Auth->user("id")):?>
<h1>Bonjour<?php echo $Auth->user('login');?></h1>
<ul>
  <li><a href="index.php?p=compte">Mon compte</a></li>
  <?php if($Auth->user("slug")=='admin'):?>
  <li><a href="index.php?p=admin">Administration</a></li>
  <?php endif; ?>
  <li><a href="index.php?p=logout">Déconnecter</a></li>
</ul>
<?php else:?>
<a href="index.php?p=login">Se connecter</a>
<?php endif;?>
  <?php echo $content_for_layout;?>
  <pre><?php print_r($_SESSION); ?></pre>
  </div>
  </body>
  
  
  

la page login.php
<?php 
if(!empty($_POST)){
  if($Auth ->login($_POST)){
  
  }else{
    echo "Mauvais identitifants";
   }
  }
 ?>

<form method="post" action="index.php?p=login">
  <label for="">Login: </label>
  <input type="text" name="login"/>
  <label for="">Mot de passe: </label>
  <input type="text" name="password"/>
  <input type="submit" value="se connecter"/>
 </form>
la page class.auth.php
<?php class Auth{
 
  var $forbiddenPage = "index.php?p=forbidden";
 
  /**
  *Permet d'identifier un utilisateur.
  **/
     function login($d){
     global $PDO;
     $req = $PDO->prepare('SELECT users.id,users.login,users.address,roles.name,roles.slug,roles.level FROM users LEFT JOIN roles ON users.role_id=roles.id WHERE login=:login AND password=:password');
     $req->execute($d);
     $data = $req->fetchAll();
     if(count($data)>0){
           $_SESSION['Auth'] = $data [0];
           return true;
     }
     return false;
   }
 
   /**
   *Autorise un rang à accéder à une page, redirige vers forbidden sinon
   **/
    
   function allow($rang){
     global $PDO;
     $req = $PDO->prepare('SELECT slug,level FROM roles');
     $req->execute();
     $data = $req->fetchAll();
     $roles = array();
     foreach($data as $d){
        $roles[$d->slug] = $d->level;
		}
		
     if(!$this->user('slug')){
         $this->forbidden();
		 		
     }else{
          
     if($roles[$rang]> $this->user('level')){
        $this->forbidden();
		
      }else{
        return true;
      }
     }
 
   }
    
   /**
   *Récupère une info utilisateur
   **/
   function user($field){
         if(isset($_SESSION['Auth']->$field)){
         return $_SESSION['Auth']->$field;
     }else{
       return false;
     }
   }
    
   /**
   *Redirige un utilisateur
   **/
   function forbidden(){
        header('Locaton:'.$this->forbiddenPage);
   }
    
}
 
$Auth = new Auth();
?>
et la page admin.php
<?php $Auth -> allow('admin');?>
<p>ADMIN</p>
la base de donné c'est 2 tableaux
roles
id name slug level
1 Administrateur admin 2
2 Membre member 1
users
id login password address role_id
1 admin admin Je suis un admin 1
2 membre membre pti membre 2


voilà j’espère pas avoir était trop long
je pense que c'est au niveau du class.auth.php que c'est pas bien configurer ou bien c'est un problème de configuration de mon server
peut-étre aussi au niveau du pdo ? je ne suis que débutant :oops:
merci beaucoup d'avance

Re: authorisation admin class.auth.php

Posté : 11 sept. 2011, 12:38
par Ryle
Je n'ai pas tout regardé en détail, mais tu as déjà une erreur dans ta méthode forbidden :
 header('Locaton:'.$this->forbiddenPage);
devrait être :
 header('Location:'.$this->forbiddenPage); // Locat-i-on

Re: authorisation admin class.auth.php

Posté : 11 sept. 2011, 12:49
par zvig
MERCI C'était juste ça désolé d'avoir perturbé le forum
merci enormement j'ai passé des heures à eessayer de débuger , !! tu me sauves la vie !! je t'adore!!

Re: authorisation admin class.auth.php

Posté : 11 sept. 2011, 18:06
par AB
Au passage, prends la bonne habitude me mettre un exit suite à un header de redirection (cf exemple 4), cela t'évitera parfois des résultats inattendus.
   function forbidden(){
        header('Location:'.$this->forbiddenPage);
        exit;
   }