feat: implement user creation, editing, and deletion functionality ALL features are working

This commit is contained in:
Morph01
2025-02-04 16:35:30 -08:00
parent 2baa69fe34
commit e3243dd018
11 changed files with 330 additions and 296 deletions

View File

@@ -1,97 +0,0 @@
<?php
session_start();
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
header('Location: ../auth.php');
exit;
}
require_once __DIR__ . '/../models/LDAPAuth.php';
$ldapAuth = new LDAPAuth();
// Récupérer les OUs administrées
$allowed_ous = $_SESSION['admin_ous'];
// Si une OU est spécifiée dans l'URL, on la pré-sélectionne
$default_ou = null;
if (isset($_GET['ou'])) {
$default_ou = urldecode($_GET['ou']);
if (!in_array($default_ou, $allowed_ous)) {
die("Accès non autorisé à cette OU.");
}
}
// Traitement du formulaire
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$pseudo = $_POST['pseudo'];
$email = $_POST['email'];
$password = $_POST['password'];
$role = $_POST['role'];
$ou_dn = $_POST['ou'];
// Validation des données
if (empty($nom) || empty($prenom) || empty($pseudo) || empty($email) || empty($password) || empty($ou_dn)) {
die("Tous les champs sont obligatoires.");
}
// Connexion LDAP
$ldapconn = ldap_connect("ldap://intranet.epul3a.local") or die("Impossible de se connecter au serveur LDAP.");
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
if (!@ldap_bind($ldapconn, $_SESSION['dn'], $_SESSION['password'])) {
die("Erreur de connexion LDAP : " . ldap_error($ldapconn));
}
// Création de l'utilisateur
$user_dn = "CN=$pseudo,$ou_dn";
$user_info = [
'cn' => $pseudo,
'sn' => $nom,
'givenName' => $prenom,
'mail' => $email,
'userPassword' => $password,
'objectClass' => ['top', 'person', 'organizationalPerson', 'user']
];
if (@ldap_add($ldapconn, $user_dn, $user_info)) {
echo "<p>Utilisateur créé avec succès dans l'OU : $ou_dn</p>";
} else {
echo "<p>Erreur lors de la création de l'utilisateur : " . ldap_error($ldapconn) . "</p>";
}
ldap_close($ldapconn);
} else {
// Affichage du formulaire
echo "<h1>Ajouter un utilisateur</h1>";
echo "<form method='POST'>";
echo " <label>Nom : <input type='text' name='nom' required></label><br>";
echo " <label>Prénom : <input type='text' name='prenom' required></label><br>";
echo " <label>Pseudo : <input type='text' name='pseudo' required></label><br>";
echo " <label>Email : <input type='email' name='email' required></label><br>";
echo " <label>Mot de passe : <input type='password' name='password' required></label><br>";
echo " <label>Rôle :
<select name='role'>
<option value='user'>Utilisateur standard</option>
<option value='admin'>Administrateur de l'OU</option>
</select>
</label><br>";
echo " <label>OU :
<select name='ou'" . ($default_ou ? " readonly" : "") . ">";
if ($default_ou) {
echo "<option value='$default_ou'>$default_ou</option>";
} else {
foreach ($allowed_ous as $ou) {
echo "<option value='$ou'>$ou</option>";
}
}
echo " </select>
</label><br>";
echo " <input type='submit' value='Créer l\'utilisateur'>";
echo "</form>";
}
// Lien de retour
echo "<p><a href='../views/menu.php'>Retour au menu</a></p>";

46
views/create_user.php Normal file
View File

@@ -0,0 +1,46 @@
<?php
session_start();
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
header('Location: auth.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Créer un utilisateur</title>
</head>
<body>
<h1>Créer un nouvel utilisateur</h1>
<form action="../controllers/create_user.php" method="post">
<label for="ou_dn">OU cible :</label>
<select id="ou_dn" name="ou_dn" required>
<?php foreach ($_SESSION['admin_ous'] as $ou) : ?>
<option value="<?= htmlspecialchars($ou) ?>"><?= htmlspecialchars($ou) ?></option>
<?php endforeach; ?>
</select><br><br>
<label for="username">Nom d'utilisateur :</label>
<input type="text" id="username" name="username" required><br><br>
<label for="firstname">Prénom :</label>
<input type="text" id="firstname" name="firstname" required><br><br>
<label for="lastname">Nom :</label>
<input type="text" id="lastname" name="lastname" required><br><br>
<label for="email">E-mail :</label>
<input type="email" id="email" name="email" required><br><br>
<label for="password">Mot de passe :</label>
<input type="password" id="password" name="password" required><br><br>
<button type="submit">Créer l'utilisateur</button>
</form>
</body>
</html>

View File

@@ -1,48 +1,28 @@
<?php
session_start();
// Vérifier si l'utilisateur est admin
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
header("Location: ../index.php");
header('Location: auth.php');
exit;
}
require_once __DIR__ . '/../controllers/controllerAdmin.php';
$user_dn = urldecode($_GET['dn']);
?>
if (!isset($_POST['user_dn'])) {
echo "Utilisateur non spécifié.";
exit;
}
<!DOCTYPE html>
<html lang="fr">
$user_dn = $_POST['user_dn'];
<head>
<meta charset="UTF-8">
<title>Supprimer un utilisateur</title>
</head>
deleteUser($user_dn); // Fonction à implémenter pour supprimer l'utilisateur
<body>
<h1>Supprimer l'utilisateur</h1>
<p>Êtes-vous sûr de vouloir supprimer cet utilisateur ?</p>
<form action="../controllers/delete_user.php" method="post" onsubmit="return confirm('Êtes-vous sûr de vouloir supprimer cet utilisateur ?');">
<input type="hidden" name="dn" value="<?= htmlspecialchars($user_dn) ?>">
<button type="submit">Confirmer la suppression</button>
</form>
</body>
echo "Utilisateur supprimé avec succès.";
header("Location: list_users.php");
exit;
function deleteUser($user_dn)
{
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
$ldapconn = ldap_connect("ldap://intranet.epul3a.local")
or die("Could not connect to LDAP server.");
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
$ldap_user = "CN=" . $_SESSION['sAMAccountName'] . ",CN=Users,DC=epul3a,DC=local";
if (!@ldap_bind($ldapconn, $ldap_user, $_SESSION['password'])) {
die("Could not bind to LDAP server: " . ldap_error($ldapconn));
}
if (!@ldap_delete($ldapconn, $user_dn)) {
die("Erreur lors de la suppression de l'utilisateur: " . ldap_error($ldapconn));
}
ldap_close($ldapconn);
}
</html>

View File

@@ -1,40 +1,42 @@
<?php
session_start();
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
header("Location: ../index.php");
header('Location: auth.php');
exit;
}
require_once __DIR__ . '/../controllers/controllerAdmin.php';
if (!isset($_POST['user_dn'])) {
echo "Utilisateur non spécifié.";
exit;
}
$user_dn = $_POST['user_dn'];
$user = getUserDetails($user_dn); // Fonction à créer pour récupérer les détails d'un utilisateur
$ous = getListOU(); // Fonction à créer pour récupérer la liste des OU
if (!$user) {
echo "Utilisateur introuvable.";
exit;
}
require_once __DIR__ . '/../models/LDAPAuth.php';
$ldapAuth = new LDAPAuth();
// Récupérer les détails de l'utilisateur à modifier
$user_dn = urldecode($_GET['dn']);
$user_details = $ldapAuth->getUserDetailsByDn($user_dn);
?>
<h2>Modifier un utilisateur</h2>
<form method="post" action="../controllers/update_user.php">
<input type="hidden" name="user_dn" value="<?= htmlspecialchars($user_dn) ?>">
<label>Nom:</label>
<input type="text" name="cn" value="<?= htmlspecialchars($user['cn'][0]) ?>" required><br>
<!DOCTYPE html>
<html lang="fr">
<label>Email:</label>
<input type="email" name="mail" value="<?= htmlspecialchars($user['mail'][0] ?? '') ?>"><br>
<head>
<meta charset="UTF-8">
<title>Modifier un utilisateur</title>
</head>
<label>OU:</label>
<body>
<h1>Modifier l'utilisateur</h1>
<form action="../controllers/edit_user.php" method="post">
<input type="hidden" name="dn" value="<?= htmlspecialchars($user_dn) ?>">
<button type="submit">Enregistrer</button>
</form>
<input type="text" id="firstname" name="firstname" value="<?= htmlspecialchars($user_details['givenName'] ?? '') ?>">
<input type="text" id="lastname" name="lastname" value="<?= htmlspecialchars($user_details['sn'] ?? '') ?>">
<input type="email" id="email" name="email" value="<?= htmlspecialchars($user_details['mail'] ?? '') ?>">
<label for="new_password">Nouveau mot de passe :</label>
<input type="password" id="new_password" name="new_password">
<button type="submit">Modifier l'utilisateur</button>
</form>
</body>
</html>

View File

@@ -36,8 +36,8 @@ if (!empty($users)) {
<td>" . ($entry['mail'][0] ?? '') . "</td>
<td>" . ($entry['distinguishedname'][0] ?? '') . "</td>
<td>
<a href='edit_user.php?dn=" . urlencode($entry['distinguishedname'][0]) . "'>Modifier</a>
<a href='delete_user.php?dn=" . urlencode($entry['distinguishedname'][0]) . "' onclick='return confirm(\"Confirmer la suppression ?\")'>Supprimer</a>
<a href='../views/edit_user.php?dn=" . urlencode($entry['distinguishedname'][0]) . "'>Modifier</a>
<a href='../controllers/delete_user.php?dn=" . urlencode($entry['distinguishedname'][0]) . "' onclick='return confirm(\"Confirmer la suppression ?\")'>Supprimer</a>
</td>
</tr>";
}

View File

@@ -10,9 +10,6 @@ if (!isset($_SESSION["login"]) || $_SESSION["login"] !== true) {
require_once __DIR__ . '/../controllers/controllerAdmin.php';
// Récupérer les infos de l'utilisateur
// $user_info = getUserByPseudo($_SESSION["sAMAccountName"]);
echo "Bienvenue " . $_SESSION["sAMAccountName"] . "!";
// Affichage du menu
@@ -29,43 +26,42 @@ if ($_SESSION["is_admin"]) {
// Modifier la section d'affichage des OUs
foreach ($_SESSION['admin_ous'] as $ou) {
preg_match('/[^=]*=([^,]*)/', $ou, $matches);
$shortName = $matches[1] ?? $ou;
echo "<h3>Gestion de $ou</h3>";
echo "<a href='../views/list_users.php?ou=" . urlencode($ou) . "'>Voir les utilisateurs</a><br>";
echo "<a href='../views/add_user.php?ou=" . urlencode($ou) . "'>Ajouter un utilisateur</a><br><br>";
echo "<a href='../views/list_users.php?ou=" . urlencode($ou) . "'>Voir les utilisateurs dans l'OU " . $shortName . "</a><br>";
echo "<a href='../views/create_user.php?ou=" . urlencode($ou) . "'>Ajouter un utilisateur dans l'OU " . $shortName . "</a><br><br>";
}
echo "<a href='../views/list_users.php'>Liste complète des utilisateurs des OU administrées</a><br>";
echo "<pre>Debug - OUs administrées : ";
print_r($_SESSION['admin_ous']);
echo "</pre>";
echo "<a href='../views/list_users.php'>Liste complète des utilisateurs des OUs administrées</a><br>";
}
echo "</ul>";
if (!isset($_SESSION['sAMAccountName'])) {
die("Nom utilisateur manquant. Veuillez vous reconnecter.");
}
echo "<h2>Profil</h2>";
// // Exemple : Lister toutes les OUs
// $ous = listAllOU();
// print_r($ous);
// // Exemple : Lister tous les utilisateurs
// $users = listAllUsers();
// print_r($users);
// Exemple : Récupérer l'OU d'un utilisateur
// $username = $_SESSION['sAMAccountName'];
// $ou = getUserOU($username);
// echo "OU de l'utilisateur : $ou";
// Debug : Vérifier les groupes de l'utilisateur
$ldapAuth = new LDAPAuth();
$user_dn = $ldapAuth->getUserDN($_SESSION['sAMAccountName']);
echo "<pre>Groupes de l'utilisateur : ";
print_r($ldapAuth->getUserGroups($user_dn));
echo "</pre>";
echo "<h3>Groupes de l'utilisateur</h3>";
$userGroups = $ldapAuth->getUserGroups($user_dn);
if (!empty($userGroups) && isset($userGroups['count']) && $userGroups['count'] > 0) {
echo "<table border='1' style='border-collapse: collapse; margin: 10px 0;'>
<tr >
<th>Groupe</th>
</tr>";
// Skip the 'count' element and iterate through numeric indices
for ($i = 0; $i < $userGroups['count']; $i++) {
echo "<tr>
<td>" . htmlspecialchars($userGroups[$i]) . "</td>
</tr>";
}
echo "</table>";
} else {
echo "<p>Aucun groupe trouvé pour cet utilisateur.</p>";
}
// Ajouter cette section après l'affichage des groupes
$user_details = $ldapAuth->getUserDetails($_SESSION['sAMAccountName']);