Je cherche à afficher les liens d'un menu en fonction du rôle de chaque utilistateurs.

class/userManager.php

public function displayMenu($user_role_id) {

         try {

            $sql = 'SELECT A.name, A.slug
                    FROM user_action AS A
                    INNER JOIN user_permission AS P
                    ON A.actionID = P.action_id
                    AND min_role_id < :user_role_id';

            echo $sql;

            $stmnt = $this->db->prepare($sql);
            $stmnt->execute(array(

                ':user_role_id' => $user_role_id
            ));

            while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {

                $menu_data[] = $row;
            }

            if(isset($menu_data)) {

                return $menu_data;
            }
            else {

                return false;
            }
        }
        catch(PDOException $e) {

            echo 'Une erreur est survenue lors de la récupération d\'une des données dans la base.';
            echo '<br>';
            echo 'Message d\'erreur : ' . $e->getMessage();
        }
    }

    public function checkUserPermission($action_slug, $user_role_id) {

        try {

            $sql = 'SELECT min_role_id, P.action_id
                    FROM user_permission AS P
                    INNER JOIN user_action AS A
                    ON A.slug = :action_slug
                    AND P.action_id = A.actionID';

            $stmnt = $this->db->prepare($sql);
            $stmnt->execute(array(

                ':action_slug' => $action_slug
            ));

            while($row = $stmnt->fetch(PDO::FETCH_ASSOC)) {

                $min_role_id = $row['min_role_id'];

                if($min_role_id > $user_role_id) {

                    return false;
                }
                else {

                    return true;
                }
            }
        }
        catch(PDOException $e) {

            echo 'Une erreur est survenue lors de la récupération d\'une des données dans la base.';
            echo '<br>';
            echo 'Message d\'erreur : ' . $e->getMessage();
        }
    }

process/process-display-menu.php

$min_role_id = isset($_SESSION['min_role_id']) ? $_SESSION['min_role_id'] : TRUE;

$manager = new userManager($db);
$menu_items = $manager->displayMenu($min_role_id);

var_dump($menu_items);

$menu_html = '';

if(!empty($menu_items)) {

    foreach($menu_items as $menu_item) {

        $name = $menu_item['name'];
        $slug = $menu_item['slug'];

        $menu_html .= '<li><a href="' . $slug . '.php">' . $name . '</a></li>';
    }
}

process/process-user-permission.php

$action_slug = substr($filename, 0, 4);

$level = isset($_SESSION['level']) ? $_SESSION['level'] : TRUE;

$manager = new userManager($db);
$userPermission = $manager->checkUserPermission($action_slug, $level);

if($userPermission === false) {

    echo 'Erreur. Cette page n\'existe pas.';

    exit;
}

mysql> SELECT * FROM user_action;
+----------+-----------------------------+----------------+
| actionID | name | slug |
+----------+-----------------------------+----------------+
| 1 | Accueil | index |
| 2 | Insertion d'une image | create-image |
| 3 | Mise à jour d'une image | update-image |
| 4 | Suppression d'une image | delete-image |
| 5 | Créer un compte utilisateur | account-create |
+----------+-----------------------------+----------------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM user_permission;
+--------------+-----------+-------------+
| permissionID | action_id | min_role_id |
+--------------+-----------+-------------+
| 1 | 1 | 0 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 4 | 1 |
| 5 | 5 | 2 |
+--------------+-----------+-------------+
5 rows in set (0.02 sec)

mysql> SELECT * FROM user_role;
+--------+----------------+-------+
| roleID | name | level |
+--------+----------------+-------+
| 1 | aucun | 0 |
| 2 | Editeur | 1 |
| 3 | Administrateur | 2 |
+--------+----------------+-------+
3 rows in set (0.00 sec)

Merci d'avance & bonne journée.

Aucune réponse