Permissions et rôles dans un espace Admin
Posté : 01 avr. 2022, 16:26
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
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');