Page 1 sur 1

Permissions et rôles dans un espace Admin

Posté : 01 avr. 2022, 16:26
par ameb2908
Bonjour, Je m'explique, je m'exerce en faisant un espace Admin. Les utilisateurs rentrent bien dans leurs sessions, mais c'est au niveau du menu que ça coince. Le menu ne s'affiche pas comme convenu selon les rôles et les permissions.

Merci d'avance et bonne soirée.

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.actionID
                    INNER JOIN user_role AS r
                    ON p.roleID < :user_role_id';

            $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.<br>
            Message d\'erreur : ' . $e->getMessage();
        }
    }

    public function checkUserPermission($action_slug, $user_role_id) {

        try {
        
            $sql = 'SELECT p.actionID, p.roleID
                    FROM user_permission AS p
                    INNER JOIN user_action AS a
                    ON p.actionID = a.actionID
                    AND a.slug = :action_slug';

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

                ':action_slug' => $action_slug
            ));

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

                if($row['p.roleID'] > $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.<br>
            Message d\'erreur : ' . $e->getMessage();
        }

    }

process/process-display-menu.php

$level = isset($_SESSION['r.level']) ? $_SESSION['r.level'] : NULL;

$manager = new userManager($db);
$menu_items = $manager->displayMenu($level);
$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>' . "\n";
    }
}

process/process-user-permission.php

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

$level = isset($_SESSION['r.level']) ? $_SESSION['r.level'] : NULL;

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

if($userPermission === false) {

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

    exit;
}

admin/menu.php

require('../process/process-display-menu.php');


<ul class="menu">
    <?php echo $menu_html; ?>
    <li><a href="../index.php">Site web</a></li>
    <li><a href="logout.php">Déconnexion</a></li>
</ul>

admin/index.php

require('../include/inc-connexion.php');
require('../include/inc-config.php');
require('../include/inc-identification-user.php');

$filename = basename( __FILE__ );
require('../process/process-user-permission.php');

require('menu.php');


Re: Permissions et rôles dans un espace Admin

Posté : 02 avr. 2022, 00:11
par @rthur
Bonjour,

Il faut que tu avances davantage dans ton debugage pour qu'on puisse t'aider efficacement.
Qu'est-ce qui ne fonctionne pas comme prévu ?
A quel endroit ton code ne réagit pas comme tu le souhaiterais ?
Qu'as-tu essayé ?
Quels sont le ou les messages d'erreur ?

Re: Permissions et rôles dans un espace Admin

Posté : 02 avr. 2022, 15:55
par ameb2908
Bonjour, le echo $menu_html doit afficher les pages admin/index.php, admin/create-image.php, admin/update-image.php, admin/delete-image

pour l'éditeur, en plus des ces pages, account-user.php pour l'administrateur & seulement admin/index.php pour le reste.

Et j'ai aucun message d'erreurs qui s'affichent.

Re: Permissions et rôles dans un espace Admin

Posté : 02 avr. 2022, 15:59
par or 1
"A quel endroit ton code ne réagit pas comme tu le souhaiterais ?
Qu'as-tu essayé ?"

Re: Permissions et rôles dans un espace Admin

Posté : 02 avr. 2022, 16:07
par ameb2908
admin/menu.php

Re: Permissions et rôles dans un espace Admin

Posté : 02 avr. 2022, 16:08
par ameb2908
Bonjour, le echo $menu_html doit afficher les liens des pages admin/index.php, admin/create-image.php, admin/update-image.php, admin/delete-image

Re: Permissions et rôles dans un espace Admin

Posté : 15 juin 2022, 11:01
par Dsynx
je met en avant une petit critique pour moi déjà :
            $sql = 'SELECT p.actionID, p.roleID
                    FROM user_permission AS p
                    INNER JOIN user_action AS a
                    ON p.actionID = a.actionID
                    AND a.slug = :action_slug';
même si ça fonctionne c'est pas bien de le faire ainsi tu va avoir des \r\n donc des sauts de ligne dans ta requête et même si imaginons que ça passe c'est pas convenable et conventionnel. donc le mieux serait ou l'ensemble sur une seul ligne dédier.
$sql = 'SELECT p.actionID, p.roleID FROM user_permission AS p INNER JOIN user_action AS a ON p.actionID = a.actionID AND a.slug = :action_slug';
ou tu split bien la requête
$sql =
    'SELECT p.actionID, p.roleID' . chr(32) .
    'FROM user_permission AS p' . chr(32) .
    'INNER JOIN user_action AS a' . chr(32) .
    'ON p.actionID = a.actionID' . chr(32) .
    'AND a.slug = :action_slug';
ou
$sql =
    'SELECT p.actionID, p.roleID ' . 
    'FROM user_permission AS p ' . 
    'INNER JOIN user_action AS a ' .  
    'ON p.actionID = a.actionID ' .  
    'AND a.slug = :action_slug';  
imaginons que ça ne fonctionne pas d'ici déjà ? autant en être certain que c'est ok avant de vérifier le reste. normalement les BDD aiment pas trop les retours de ligne possible qu'avec le temps et les nouvels version il y a eu des filtres qui les virent mais bon dans le doute on balance un truc pure et une certitude que c'est maitrisé et propre.

Re: Permissions et rôles dans un espace Admin

Posté : 25 juin 2022, 17:19
par ameb2908
Bonjour, désolé de ne pas avoir donné suite dans l'immédiat, en raison d'une autre activité me concernant.

J'ai suivis des recommandations, et j'ai aussi modifier les requêtes et çà me donne ceci :

C:\wamp64\www\projet-images-en-poo-et-pdo\process\process-display-menu.php:6:string 'Cyrille' (length=7)

SELECT A.name, A.slug FROM user_action AS A INNER JOIN user_permission AS P ON A.actionID = P.action_id INNER JOIN user_role AS R ON P.min_role_id = R.level INNER JOIN users AS U ON R.roleID = U.role_id AND P.min_role_id > :user_role_id

C:\wamp64\www\projet-images-en-poo-et-pdo\process\process-display-menu.php:11:

array (size=4)
0 =>
array (size=2)
'name' => string 'Créer un compte utilisateur' (length=28)
'slug' => string 'account-create' (length=14)

1 =>
array (size=2)
'name' => string 'Insertion d'une image' (length=21)
'slug' => string 'create-image' (length=12)

2 =>
array (size=2)
'name' => string 'Mise à jour d'une image' (length=24)
'slug' => string 'update-image' (length=12)

3 =>
array (size=2)
'name' => string 'Suppression d'une image' (length=23)
'slug' => string 'delete-image' (length=12)

Créer un compte utilisateur
Insertion d'une image
Mise à jour d'une image
Suppression d'une image
Site web
Déconnexion

Egalement dans les deux autres sessions => Aucun et éditeur.