ajout et modifications de plusieurs pages liées à l'authentification

This commit is contained in:
Poty Thomas 2026-06-05 11:52:02 +02:00
parent 768461a962
commit 9a3cbdcb81
6 changed files with 232 additions and 10 deletions

View file

@ -0,0 +1,63 @@
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
ini_set('display_errors', 1);
function login_ctrl() {
$ask_route = null;
if (isset($_GET['ask'])) {
$ask_route = htmlentities($_GET['ask']);
}
// Si le formulaire est soumis (POST), on vérifie, sinon on l'affiche
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
verify_login_ctrl($ask_route);
} else {
login_form_ctrl($ask_route);
}
}
function verify_login_ctrl(?string $route) {
require('models/user_crud.php');
require('config/config.php');
$login = isset($_POST['login']) ? htmlentities($_POST['login']) : '';
$passwd = isset($_POST['password']) ? htmlentities($_POST['password']) : '';
$user_data = recuperation_auth($connex, $login);
if ($user_data && $user_data['passwd'] === $passwd) {
$_SESSION['login'] = $user_data['login'];
$_SESSION['role'] = $user_data['type'];
// Redirection
header('Location: index.php?route=' . $route);
exit;
} else {
echo 'Authentication error !!!';
exit;
}
}
/**
* Contrôleur de déconnexion
*/
function login_form_ctrl(?string $route) {
require('views/login_view.php');
login_form_view($route);
}
/**
* Authentication processing
*/
function logout_ctrl() {
unset($_SESSION);
session_destroy();
require('views/welcome_view.php');
}

28
controllers/auth_utilities.php Normal file → Executable file
View file

@ -1,19 +1,31 @@
<?php
// Vérifie si l'utilisateur est connecté
// True if user is logged (auth is right)
function is_logged() {
return isset($_SESSION['login']);
$status = false;
if (isset($_SESSION['login'])) {
$status = true;
}
return $status;
}
// Vérifie si l'utilisateur a un rôle spécifique
// True if user has the role $role
function has_role(string $role) {
return isset($_SESSION['role']) && $_SESSION['role'] == $role;
$status = false;
if (isset($_SESSION['role'])) {
if ($_SESSION['role'] == $role) {
$status = true;
}
}
return $status;
}
// Redirige vers l'authentification si l'utilisateur n'a pas les droits
function verify_grants(string $route, string $role = '') {
if (!has_role($role) && !($role == '' && is_logged())) {
function verify_grants(string $route, string $role='') {
if (! has_role($role) && ! ($role == '' && is_logged())) {
header('Location: index.php?route=auth&ask=' . $route);
exit;
}
}
// Nothing is done so process goes on
}

16
models/user_crud.php Normal file
View file

@ -0,0 +1,16 @@
<?php
function recuperation_auth(PDO $connex, int $id):array {
require('config/config.php');
$req = "SELECT login, passwd, type FROM Utilisateur WHERE login = :login";
$prep = $connex->prepare($req);
$prep->bindValue(':id', $id);
$prep->execute();
$auth = $prep->fetch(PDO::FETCH_ASSOC);
$prep->closeCursor();
return $auth;
}

65
views/auth_ctrl.php Executable file
View file

@ -0,0 +1,65 @@
<?php
/**
* Auth controller
*/
function login_ctrl() {
$ask_route = null;
if (isset($_GET['ask'])) {
$ask_route = htmlentities($_GET['ask']);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
verify_login_ctrl($ask_route);
} else {
login_form_ctrl($ask_route);
}
}
/**
* Authentication form display controller
*/
function login_form_ctrl(?string $route) {
require('views/login_view.php');
login_form_view($route);
}
/**
* Authentication processing
*/
function verify_login_ctrl(?string $route) {
// unexpected characters treatment with htmlentities() function
$login = htmlentities($_POST['login']);
$passwd = htmlentities($_POST['passwd']);
//Ce code est un exemple, en réalité l'authentification sera faite depuis une base ou annuaire LDAP en interrogeant le CRUD !
//Compte admin
if ($login == 'admin' && $passwd == 'admin') {
$_SESSION['login'] = $login;
$_SESSION['role'] = 'admin';
//On redirige vers la route demandée qui a provoqué la demande d'authentification
header('Location: index.php?route=' . $route);
//Compte etudiant
} elseif ($login == 'lecteur' && $passwd == 'lecteur') {
$_SESSION['login'] = $login;
$_SESSION['role'] = '';
//On redirige vers la route qui a provoqué la demande d'authentification
header('Location: index.php?route=' . $route);
} else {
echo 'Authentication error !!!';
exit;
}
}
/**
* Logout
*/
function logout_ctrl() {
unset($_SESSION);
session_destroy();
require('views/welcome_view.php');
}

65
views/auth_ctrl.php~ Executable file
View file

@ -0,0 +1,65 @@
<?php
/**
* Auth controller
*/
function login_ctrl() {
$ask_route = null;
if (isset($_GET['ask'])) {
$ask_route = htmlentities($_GET['ask']);
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
verify_login_ctrl($ask_route);
} else {
login_form_ctrl($ask_route);
}
}
/**
* Authentication form display controller
*/
function login_form_ctrl(?string $route) {
require('views/login_view.php');
login_form_view($route);
}
/**
* Authentication processing
*/
function verify_login_ctrl(?string $route) {
// unexpected characters treatment with htmlentities() function
$login = htmlentities($_POST['login']);
$passwd = htmlentities($_POST['passwd']);
//Ce code est un exemple, en réalité l'authentification sera faite depuis une base ou annuaire LDAP en interrogeant le CRUD !
//Compte admin
if ($login == 'admin' && $passwd == 'admin') {
$_SESSION['login'] = $login;
$_SESSION['role'] = 'admin';
//On redirige vers la route demandée qui a provoqué la demande d'authentification
header('Location: index.php?route=' . $route);
//Compte etudiant
} elseif ($login == 'etudiant' && $passwd == 'etudiant') {
$_SESSION['login'] = $login;
$_SESSION['role'] = '';
//On redirige vers la route qui a provoqué la demande d'authentification
header('Location: index.php?route=' . $route);
} else {
echo 'Authentication error !!!';
exit;
}
}
/**
* Logout
*/
function logout_ctrl() {
unset($_SESSION);
session_destroy();
require('views/welcome_view.php');
}

View file

@ -1,7 +1,8 @@
<?php
#ceci est la partie "view" de la page de login, le header et le footer ne sont pour l'instant pas actif
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
ini_set('display_errors', 1);
function login_form_view(?string $route) {
#require('header.php');
@ -9,7 +10,7 @@ function login_form_view(?string $route) {
echo '<h2>Page d\'authentification</h2>';
echo '<form action="index.php?route=auth&ask=' . $route . '" method="post">';
echo '<p>Login<input type="text" name="login" /></p>';
echo '<p>Mot de passe<input type="password" name="password" /></p>';
echo '<p>Mot de passe<input type="passwd" name="password" /></p>';
echo '<p><input type="submit" value="Valider" /></form>';
#require('footer.php');