feat: implement user creation, editing, and deletion functionality ALL features are working
This commit is contained in:
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
|
||||
header("Location: ../index.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$ldapAuth = new LDAPAuth();
|
||||
$available_ous = $ldapAuth->getAllOUs();
|
||||
$admin_ous = $_SESSION['admin_ous'] ?? [];
|
||||
|
||||
// Filtrer les OUs disponibles selon les droits de l'admin
|
||||
$allowed_ous = array_intersect($available_ous, $admin_ous);
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
// Récupérer les données du formulaire
|
||||
$nom = $_POST['nom'];
|
||||
$prenom = $_POST['prenom'];
|
||||
$pseudo = $_POST['pseudo'];
|
||||
$email = $_POST['email'];
|
||||
$password = $_POST['password'];
|
||||
$role = $_POST['role'];
|
||||
$ou_dn = $_POST['ou']; // DN de l'OU sélectionnée
|
||||
|
||||
// Valider les données (exemple simplifié)
|
||||
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("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));
|
||||
}
|
||||
|
||||
$samAccountName = strtolower(substr($prenom, 0, 1) . $nom); // Générer le samAccountName
|
||||
|
||||
// Créer l'utilisateur dans l'OU sélectionnée
|
||||
$user_dn = "CN=$pseudo,$ou_dn"; // DN du nouvel utilisateur
|
||||
|
||||
$user_info = [
|
||||
'cn' => $pseudo,
|
||||
'sn' => $nom,
|
||||
'givenName' => $prenom,
|
||||
'mail' => $email,
|
||||
'userPassword' => $password,
|
||||
'samAccountName' => $samAccountName,
|
||||
// 'userAccountControl' => "544", // Activer le compte
|
||||
'objectClass' => ['top', 'person', 'organizationalPerson', 'user']
|
||||
];
|
||||
|
||||
// Ajout de l'utilisateur
|
||||
if (@ldap_add($ldapconn, $user_dn, $user_info)) {
|
||||
echo "Utilisateur créé avec succès dans l'OU : $ou_dn";
|
||||
} else {
|
||||
echo "Erreur lors de la création de l'utilisateur : " . ldap_error($ldapconn);
|
||||
}
|
||||
|
||||
ldap_close($ldapconn);
|
||||
}
|
||||
@@ -1,42 +1,45 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/../models/LDAPAuth.php';
|
||||
|
||||
// Check if user is logged in and is admin
|
||||
if (session_status() == PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// Vérifier les permissions
|
||||
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
|
||||
header("Location: ../index.php");
|
||||
header('Location: ../auth.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Initialize form variables
|
||||
$nom = isset($_POST['nom']) ? $_POST['nom'] : '';
|
||||
$prenom = isset($_POST['prenom']) ? $_POST['prenom'] : '';
|
||||
$pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : '';
|
||||
$email = isset($_POST['email']) ? $_POST['email'] : '';
|
||||
$password = isset($_POST['password']) ? $_POST['password'] : '';
|
||||
// Récupérer les données de la session et du formulaire
|
||||
$admin_username = $_SESSION['sAMAccountName']; // sAMAccountName de l'admin connecté
|
||||
$ou_dn = $_POST['ou_dn']; // OU cible pour la création
|
||||
|
||||
// Display form
|
||||
echo "<h2>Création d'un utilisateur</h2>";
|
||||
echo "<form method=post action='add_user.php'>";
|
||||
echo "Nom <input type=text name=nom value='$nom' required><br>";
|
||||
echo "Prénom <input type=text name=prenom value='$prenom' required><br>";
|
||||
echo "Nom d'utilisateur <input type=text name=pseudo value='$pseudo' required><br>";
|
||||
echo "E-Mail <input type=text name=email value='$email' required><br>";
|
||||
echo "Mot de passe <input type=password name=password value='$password' required><br>";
|
||||
// Récupérer les attributs du nouvel utilisateur depuis le formulaire
|
||||
$entry = [
|
||||
'objectClass' => ['top', 'person', 'organizationalPerson', 'user'],
|
||||
'cn' => $_POST['username'],
|
||||
'givenName' => $_POST['firstname'],
|
||||
'sn' => $_POST['lastname'],
|
||||
'mail' => $_POST['email'],
|
||||
'userPassword' => $_POST['password'],
|
||||
'sAMAccountName' => $_POST['username'],
|
||||
];
|
||||
|
||||
echo "Choisir une OU <select name='ou' required>";
|
||||
require_once 'controllerAdmin.php';
|
||||
$ous = listAllOU(); // Récupérer la liste des OUs
|
||||
foreach ($ous as $ou) {
|
||||
$dn = $ou['distinguishedname'][0];
|
||||
$name = $ou['ou'][0];
|
||||
echo "<option value='$dn'>$name</option>";
|
||||
// Vérifier que l'admin a les droits sur l'OU cible
|
||||
$ldapAuth = new LDAPAuth();
|
||||
if (!in_array($ou_dn, $_SESSION['admin_ous'])) {
|
||||
die("Accès non autorisé");
|
||||
}
|
||||
echo "</select><br>";
|
||||
|
||||
echo "Rôle dans l'OU <select name=role>";
|
||||
echo "<option value='user'>Utilisateur standard</option>";
|
||||
echo "<option value='admin'>Administrateur</option>";
|
||||
echo "</select><br>";
|
||||
|
||||
echo "<input type='submit' value='Créer'>";
|
||||
echo "</form>";
|
||||
// Tenter la création
|
||||
try {
|
||||
$user_dn = "CN=" . $_POST['username'] . "," . $ou_dn;
|
||||
if ($ldapAuth->addUserWithAdminAuth($user_dn, $entry, $admin_username, $_SESSION['password'])) {
|
||||
header("Location: ../views/list_users.php?ou=" . urlencode($ou_dn));
|
||||
} else {
|
||||
die("Erreur lors de la création.");
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
die("Erreur : " . $e->getMessage());
|
||||
}
|
||||
|
||||
35
controllers/delete_user.php
Normal file
35
controllers/delete_user.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../models/LDAPAuth.php';
|
||||
|
||||
if (session_status() == PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// Vérifier les permissions
|
||||
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
|
||||
header('Location: ../auth.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Récupérer les données de la session et du formulaire
|
||||
$admin_username = $_SESSION['sAMAccountName']; // sAMAccountName de l'admin connecté
|
||||
$user_dn = urldecode($_GET['dn']); // DN de l'utilisateur à supprimer
|
||||
|
||||
// Vérifier que l'admin a les droits sur l'OU de l'utilisateur
|
||||
$ldapAuth = new LDAPAuth();
|
||||
$user_ou = $ldapAuth->getUserOUFromDN($user_dn);
|
||||
|
||||
if ($user_ou === null || !in_array($user_ou, $_SESSION['admin_ous'])) {
|
||||
die("Accès non autorisé");
|
||||
}
|
||||
|
||||
// Tenter la suppression
|
||||
try {
|
||||
if ($ldapAuth->deleteUserWithAdminAuth($user_dn, $admin_username, $_SESSION['password'])) {
|
||||
header("Location: ../views/list_users.php?ou=" . urlencode($user_ou));
|
||||
} else {
|
||||
die("Erreur lors de la suppression.");
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
die("Erreur : " . $e->getMessage());
|
||||
}
|
||||
50
controllers/edit_user.php
Normal file
50
controllers/edit_user.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
session_start();
|
||||
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
|
||||
header('Location: auth.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../models/LDAPAuth.php';
|
||||
|
||||
// Utiliser $_POST au lieu de $_GET pour récupérer le DN
|
||||
$user_dn = isset($_POST['dn']) ? urldecode($_POST['dn']) : '';
|
||||
|
||||
if (empty($user_dn)) {
|
||||
die("DN de l'utilisateur manquant.");
|
||||
}
|
||||
|
||||
// Construction du tableau des attributs en filtrant les valeurs vides et en forçant un format tableau
|
||||
$attributes = [];
|
||||
|
||||
if (!empty($_POST['firstname'])) {
|
||||
$attributes['givenName'] = [$_POST['firstname']];
|
||||
}
|
||||
|
||||
if (!empty($_POST['lastname'])) {
|
||||
$attributes['sn'] = [$_POST['lastname']];
|
||||
}
|
||||
|
||||
if (!empty($_POST['email'])) {
|
||||
$attributes['mail'] = [$_POST['email']];
|
||||
}
|
||||
|
||||
if (!empty($_POST['new_password'])) {
|
||||
$attributes['userPassword'] = [$_POST['new_password']];
|
||||
}
|
||||
|
||||
$ldapAuth = new LDAPAuth();
|
||||
$user_ou = $ldapAuth->getUserOUFromDN($user_dn);
|
||||
if ($user_ou === null || !in_array($user_ou, $_SESSION['admin_ous'])) {
|
||||
die("Accès non autorisé");
|
||||
}
|
||||
|
||||
try {
|
||||
if ($ldapAuth->updateUserWithAdminAuth($user_dn, $attributes, $_SESSION['sAMAccountName'], $_SESSION['password'])) {
|
||||
header("Location: ../views/list_users.php?ou=" . urlencode($user_ou));
|
||||
} else {
|
||||
die("Erreur lors de la modification.");
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
die("Erreur : " . $e->getMessage());
|
||||
}
|
||||
Reference in New Issue
Block a user