diff --git a/controllers/add_user.php b/controllers/add_user.php deleted file mode 100644 index c4d2ae5..0000000 --- a/controllers/add_user.php +++ /dev/null @@ -1,68 +0,0 @@ -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); -} diff --git a/controllers/create_user.php b/controllers/create_user.php index ee56fa5..d03daca 100644 --- a/controllers/create_user.php +++ b/controllers/create_user.php @@ -1,42 +1,45 @@ Création d'un utilisateur"; -echo "
"; +// 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()); +} diff --git a/controllers/delete_user.php b/controllers/delete_user.php new file mode 100644 index 0000000..51fea3b --- /dev/null +++ b/controllers/delete_user.php @@ -0,0 +1,35 @@ +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()); +} diff --git a/controllers/edit_user.php b/controllers/edit_user.php new file mode 100644 index 0000000..f7e94f7 --- /dev/null +++ b/controllers/edit_user.php @@ -0,0 +1,50 @@ +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()); +} diff --git a/models/LDAPAuth.php b/models/LDAPAuth.php index 10ef257..5d07158 100644 --- a/models/LDAPAuth.php +++ b/models/LDAPAuth.php @@ -359,4 +359,91 @@ class LDAPAuth } return $clean; } + + public function getUserDetailsByDn($dn) + { + $this->connect(); + $this->bindServiceAccount(); + + $filter = "(objectClass=user)"; + $attributes = ["givenName", "sn", "mail", "sAMAccountName"]; + $result = ldap_read($this->ad, $dn, $filter, $attributes); + $entries = ldap_get_entries($this->ad, $result); + + return $this->cleanLdapEntries($entries[0]); + } + + public function updateUser($dn, $attributes) + { + $this->connect(); + $this->bindServiceAccount(); + + return ldap_modify($this->ad, $dn, $attributes); + } + + public function getUserOUFromDN($dn) + { + // Extraire l'OU ou le conteneur parent + $parts = explode(',', $dn); + foreach ($parts as $part) { + if (strpos($part, 'OU=') === 0) { + return $part . ",DC=epul3a,DC=local"; + } + } + // Si l'utilisateur est dans CN=Users, retourner CN=Users + if (strpos($dn, 'CN=Users,DC=epul3a,DC=local') !== false) { + return "CN=Users,DC=epul3a,DC=local"; + } + return null; + } + + public function getAdConnection() + { + return $this->ad; + } + + /** + * Supprime un utilisateur en utilisant les identifiants de l'admin connecté + */ + public function deleteUserWithAdminAuth($user_dn, $admin_username, $admin_password) + { + $this->connect(); + $this->bindWithCredentials($admin_username, $admin_password); + + if (!@ldap_delete($this->ad, $user_dn)) { + return false; + } + return true; + } + + /** + * Met à jour un utilisateur avec les identifiants de l'admin + */ + public function updateUserWithAdminAuth($user_dn, $attributes, $admin_username, $admin_password) + { + $this->connect(); + $this->bindWithCredentials($admin_username, $admin_password); + return ldap_modify($this->ad, $user_dn, $attributes); + } + + /** + * Ajoute un nouvel utilisateur avec les droits de l'admin + */ + public function addUserWithAdminAuth($dn, $entry, $admin_username, $admin_password) + { + $this->connect(); + $this->bindWithCredentials($admin_username, $admin_password); + return ldap_add($this->ad, $dn, $entry); + } + + /** + * Méthode générique pour lier la connexion avec des identifiants + */ + private function bindWithCredentials($username, $password) + { + $admin_dn = $this->getUserDN($username); // Récupérer le DN de l'admin + if (!@ldap_bind($this->ad, $admin_dn, $password)) { + throw new Exception("Erreur d'authentification : " . ldap_error($this->ad)); + } + } } diff --git a/views/add_user.php b/views/add_user.php deleted file mode 100644 index f993020..0000000 --- a/views/add_user.php +++ /dev/null @@ -1,97 +0,0 @@ - $pseudo, - 'sn' => $nom, - 'givenName' => $prenom, - 'mail' => $email, - 'userPassword' => $password, - 'objectClass' => ['top', 'person', 'organizationalPerson', 'user'] - ]; - - 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); -} else { - // Affichage du formulaire - echo "Êtes-vous sûr de vouloir supprimer cet utilisateur ?
+ + -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); -} + \ No newline at end of file diff --git a/views/edit_user.php b/views/edit_user.php index 5559801..c57f8e5 100644 --- a/views/edit_user.php +++ b/views/edit_user.php @@ -1,40 +1,42 @@ getUserDetailsByDn($user_dn); ?> -Debug - OUs administrées : "; - print_r($_SESSION['admin_ous']); - echo ""; + echo "Liste complète des utilisateurs des OUs administrées
Groupes de l'utilisateur : "; -print_r($ldapAuth->getUserGroups($user_dn)); -echo ""; + +echo "
| Groupe | +
|---|
| " . htmlspecialchars($userGroups[$i]) . " | +
Aucun groupe trouvé pour cet utilisateur.
"; +} // Ajouter cette section après l'affichage des groupes $user_details = $ldapAuth->getUserDetails($_SESSION['sAMAccountName']);