Bonjour , je viens de suivre le tutoriel sur les authorisations d'utilisateurs. j'ai tout qui fonctionne à peu près comme il faut sauf que la page admin et accessible meme si je ne suis pas logger. voici ma 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 admin.php

<?php $Auth -> allow('admin');?>
<p>ADMIN</p>

J'ai essayé pendant pas mal de temps puis vérifier les erreurs aussi mais ne comprends pas
Merci

8 réponses


On peut voir à quoi ressemble ta variable $roles après le foreach ? Tu as mis des echo un peu partout pour voir ou allée ta fonction allow ?

euuh... si je fais print_r($roles) ça m'affiche ça
Array ( [admin] => 2 ) Array ( [admin] => 2 [member] => 1 )
merci pour ton aide précieux et pour ce super tutoriel !

pour les 2 comptes c'est pareil admin ou membre

Et tu as mis des echos pour voir où il rentre au niveau des if ?

désolé mais je ne comprends pas ou mettre les echos

j'ai fait un echo rang juste avant le if et après le foreach çam'affiche membre pour les 2 comptes

sinan quand je vais sur la page admin.php sans me logguer j'ai admin(avec echo $rang) , et quand chuis sur n'importe quelle compte(membre ou admin) sur la page compte j'ai member, et sur la page j'ai admin (toujours avec echo $rang)
merci encore désolé pour ma newbititude

sur la page admin j'ai admin