// dans la classe user
public function hasRoles($role) {
return in_array($role, unserialize($this->roles));
}if (!$user->hasRole('adm')) {
header('HTTP/1.0 403 Forbidden');
// possibilité de faire un include d'une page html 403 personnalisée
exit();
}<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit();
}
require('_connexion_pdo.php');
include ('header.php');
$query = "SELECT username FROM users where Privilège='ADM' ;";
try {
$pdo_select = $pdo->prepare($query);
$pdo_select->execute();
$NbreData = $pdo_select->rowCount(); // nombre d'enregistrements (lignes)
$rowAll = $pdo_select->fetchAll(); // tout dans le meme tableau
} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
for($i=0;$i<$NbreData;$i++){
$autorise[]= $rowAll[$i]["username"];
}
if (!in_array($_SESSION["username"],$autorise))
{
echo'interdit';
header('HTTP/1.0 403 Forbidden');
exit();
}
echo 'c bon';// la classe user : je pars du principe que la colonne Privilège se nomme privilege parce que les majuscules en début de nom et les accents bof
class user {
public function hasPrivilege($privilege) {
return $privilege == $this->privilege;
}
}
// récupération du user à chaque page à partir de l'id avec pdo (include de connexion au préalable biensur et dans mon cas j'ai appelé la variable $pdo)
$statement = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$statement->execute([
':id' => $_SESSION['user_id']// $_SESSION['user_id'] mémorisé lors du login de l'utilisateur
]);
$user = $statement->fetchObject('user');// avec le nom de la classe user
// test du privilege
if (!$user->hasPrivilege('adm')) {
header('HTTP/1.0 403 Forbidden');
// possibilité de faire un include d'une page html 403 personnalisée
exit();
}
// ici l'utilisateur est bien un admecho $_SESSION['user_id'];
le echo $user et le print_r $user n'affichent rien<?php
session_start();
class user {
public function hasPrivilege($privilege) {
return $privilege == $this->privilege;
}
}
require('_connexion_pdo.php');
$statement = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$statement->execute([':id' => $_SESSION['user_id']]);
$user = $statement->fetchObject('user');
echo $user;
echo'<pre>';
print_r($user);
echo'</pre>';
//session_start();
echo'<br><br><br><br>bonjour<br>';
echo '<br>Didier<br>'.$_SESSION['username'];
echo $_SESSION['user_id'];
echo'<aurevoir>';
/*echo $_SESSION['<?php
session_start();
if(!isset($_SESSION["username"])){
header("Location: login.php");
exit();
}
if ($_SESSION['username']=='adm')
include('ADM.php');
require('_connexion_pdo.php'); ?>
<html lang="FR-fr">
<head>
<title>***</title>
<meta charset='UTF-8'>
<meta name="viewport" content="width=device-width", initial-scale="1.0">
<meta name="description" content="***">
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:800&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="didier.js"></script>
</head>
<div class="corps">
<form action="" method="POST">
<input type="text" name="id" placeholder="id" required />
<input type="text" name="Priv" placeholder="Privilège" required />
<input type="submit" name="submit" value="Modifier la table" />
</form>
<?php
$id=$_POST['id'];
$Priv=$_POST['Priv'];
if (isset($_POST['id'])){
$query = "UPDATE users SET privilege='$Priv' WHERE id=$id";
$pdo_select = $pdo->prepare($query);
$pdo_select->execute();
}
$query = "SELECT * FROM users ;";
try {
$pdo_select = $pdo->prepare($query);
$pdo_select->execute();
$NbreData = $pdo_select->rowCount();
$rowAll = $pdo_select->fetchAll();
} catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
$nbcol=2;
echo '<table >';
for($i=0;$i<$NbreData;$i++){
$valeur1=$rowAll[$i]['id'];
$valeur2=$rowAll[$i]['nom'];
$valeur3=$rowAll[$i]['email'];
$valeur4=$rowAll[$i]['privilege'];
if($i%$nbcol==3)
echo '<tr>';
echo '<td>'.$valeur1.'</td><td>'.$valeur2.'</td><td>'.$valeur3.'</td><td>'.$valeur4.'</td>';
if($i%$nbcol==($nbcol-1))
echo '</tr>';
}
echo '</table>';
?>
</div>// exemple d'insert (je mets pas toutes les colonnes mais tu vois l'idée)
$statement = $pdo->prepare('INSERT INTO users SET privileges = :privileges');
$statement->execute([
'privileges' => serialize([ 'adm', 'vip' ])
]);
class user {
public function __construct() {
$this->privileges = unserialize($this->privileges);
}
public function hasPrivilege($privilege) {
return in_array($privilege, $this->privileges);
}
}
class user {
// ...
public function hasOnePrivilegeIn($privileges) {
return count(array_intersect($privileges, $this->privileges));
}
public function hasAllPrivilegesIn($privileges) {
return count($privileges) == count(array_intersect($privileges, $this->privileges));
}
}