authorisation admin class.auth.php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : authorisation admin class.auth.php

Re: authorisation admin class.auth.php

par AB » 11 sept. 2011, 18:06

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;
   }

Re: authorisation admin class.auth.php

par zvig » 11 sept. 2011, 12:49

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

par Ryle » 11 sept. 2011, 12:38

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

authorisation admin class.auth.php

par valdsr » 11 sept. 2011, 10:53

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