Bonjour,

j'ai suivi le tuto sur la formation php et j'essaye d'adapter le tuto sur la gestion des permission a mon petit projet... mais je rencontre une erreur et je ene sait pas trop comment m en sortir, pourriez vous me donner un petit coup de main?

merci d'avance

Gilles

voici la class

<?php class Auth{
    var $forbiddenPage = "forbidden.php";
    function login($d){
        global $db;
        $username = $db->quote($d'username']);
        $password = sha1($d'password']);
        $select = $db->query("SELECT users.id, users.username, roles.name, roles.slug, roles.level FROM users LEFT JOIN roles ON users.role_id=roles.id WHERE username=$username AND password='$password'");
        if($select-> rowCount() > 0){
            $_SESSION'Auth'] = $select->fetch();
            return true;
        }
        return false;
    }
    function allow($rang){
        global $db;
        $select = $db->query("SELECT slug, level FROM roles")->fechAll();
        //$data = $select->fetchAll();
        $roles = array();
        foreach($select as $d){
            $roles$d->slug]=$d->level;
        }
        if(!$this->user('slug')){
            $this->fordidden();
        }else{
            if($roles$rang]>$this->user('level')){
                $this->forbidden();
            }else{
                return true;
            }
        }
    }
    function user($field){
        if($field == 'role') $field ='slug';
        if(isset($_SESSION'Auth']->$field)){
            return $_SESSION'Auth']->$field;
        }else{
            return false;
        }
    }
    function forbidden(){
        header('Location:'.$this->forbiddenPage);
    }
}
$Auth = new Auth()

le fichier login.php

<?php
include 'lib/includes.php';
/**
* TRAITEMENT DU FORMULAIRE
**/
if(!empty($_POST)){
    if($Auth->login($_POST)){

                /*if($Auth->user('administrateur')){
                    setFlash("Vous êtes maintenant connecté en tant qu'Administrateur");
                    header('Location:' . WEBROOT . 'admin/index.php');
                    die();
                }elseif($Auth->user('agence')){
                    setFlash("Vous êtes maintenant connecté en tant qu'Agence");
                    header('Location:' . WEBROOT . 'agence/index.php');
                    die();
                }*/
    }else{
        setFlash('Mauvais identifiants', 'danger');
    }
}
/**
 * INCLUSION DU HEADER
 */
include 'partials/header.php';
?>
<div class="form-signin">
<h4 class="form-signin-heading">Merci de vous identifier</h4>
<form action="#" method="post">
    <div class="form-group">
        <label for="username">Nom d'utilisateur</label>
        <?= input('username'); ?>
    </div>
    <div class="form-group">
        <label for="password">Password</label>
        <input type="password" class="form-control" id="password" name="password">
    </div>
    <button type="submit" class="btn btn-primary">Se connecter</button>
</form>
</div>
<?php include 'lib/debug.php'; ?>
<?php include 'partials/footer.php'; ?>

et l'exemple d'une page qui doit etre visible par les agences et les rang au dessus

<?php 
include '../lib/includes.php';
$Auth->allow('agence'); 
global $db;
$select = $db->query("SELECT slug FROM users WHERE id=$id");
$select = array($Auth->user('id'));
 ?>
page pour les agence aussi visible par les admin et rangs au dessus de agence.

3 réponses


PhiSyX
Réponse acceptée

Hi,

Tu récupères peut-être bien l'id de l'utilisateur mais tu ne l'as stock pas en information dans une variable nommée "$id".

...
$id = $Auth->user('id'); $select = $db->query(...);
...

Eu... tu pourrai déjà nous dire quelle erreur rencontres tu ?

gilles40
Auteur

Bonsoir,

c est dans la requete qui se trouve dans la page que je doit autoriser il me dit que la variable $id n existe pas alors que je la recupere bien dans ma fonction login, je ne trouve pas pourquoi j ai cette erreur