feat: implement OU filtering for admin users and enhance menu display
This commit is contained in:
@@ -1,13 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
// Vérifier si l'utilisateur est connecté et est administrateur
|
|
||||||
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
|
if (!isset($_SESSION["login"]) || !$_SESSION["is_admin"]) {
|
||||||
header("Location: ../index.php");
|
header("Location: ../index.php");
|
||||||
exit;
|
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') {
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
// Récupérer les données du formulaire
|
// Récupérer les données du formulaire
|
||||||
$nom = $_POST['nom'];
|
$nom = $_POST['nom'];
|
||||||
|
|||||||
@@ -112,28 +112,49 @@ class LDAPAuth
|
|||||||
|
|
||||||
// Liste des groupes administratifs et leurs OUs associées
|
// Liste des groupes administratifs et leurs OUs associées
|
||||||
$admin_groups_with_ous = [
|
$admin_groups_with_ous = [
|
||||||
"Domain Admins" => "OU=Domain Admins,DC=epul3a,DC=local",
|
"CN=Domain Admins,CN=Users,DC=epul3a,DC=local" => "OU=Domain Admins,DC=epul3a,DC=local",
|
||||||
"Enterprise Admins" => "OU=Enterprise Admins,DC=epul3a,DC=local",
|
"CN=Enterprise Admins,CN=Users,DC=epul3a,DC=local" => "OU=Enterprise Admins,DC=epul3a,DC=local",
|
||||||
"Schema Admins" => "OU=Schema Admins,DC=epul3a,DC=local",
|
"CN=Schema Admins,CN=Users,DC=epul3a,DC=local" => "OU=Schema Admins,DC=epul3a,DC=local",
|
||||||
"Group Policy Creator Owners" => "OU=Group Policy Creator Owners,DC=epul3a,DC=local",
|
"CN=Group Policy Creator Owners,CN=Users,DC=epul3a,DC=local" => "OU=Group Policy Creator Owners,DC=epul3a,DC=local",
|
||||||
];
|
];
|
||||||
|
|
||||||
// Récupérer les groupes auxquels l'utilisateur appartient
|
|
||||||
$admin_ous = [];
|
$admin_ous = [];
|
||||||
foreach ($admin_groups_with_ous as $group_name => $ou) {
|
foreach ($admin_groups_with_ous as $group_dn => $ou) {
|
||||||
$filter = "(memberOf:1.2.840.113556.1.4.1941:=$group_name)";
|
$filter = "(memberOf:1.2.840.113556.1.4.1941:=$group_dn)";
|
||||||
$attributes = ["memberOf"];
|
$attributes = ["memberOf"];
|
||||||
|
|
||||||
$result = ldap_read($this->ad, $user_dn, $filter, $attributes);
|
$result = ldap_read($this->ad, $user_dn, $filter, $attributes);
|
||||||
if ($result && ldap_count_entries($this->ad, $result) > 0) {
|
if ($result && ldap_count_entries($this->ad, $result) > 0) {
|
||||||
$admin_ous[] = $ou; // Retourne l'OU associée
|
$admin_ous[] = $ou;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $admin_ous;
|
return array_unique($admin_ous);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getAllOUs()
|
||||||
|
{
|
||||||
|
$this->connect();
|
||||||
|
$this->bindServiceAccount();
|
||||||
|
|
||||||
|
$searchBase = "DC=epul3a,DC=local";
|
||||||
|
$filter = "(objectClass=organizationalUnit)";
|
||||||
|
$attributes = ["ou", "distinguishedName"];
|
||||||
|
|
||||||
|
$result = ldap_search($this->ad, $searchBase, $filter, $attributes);
|
||||||
|
$entries = ldap_get_entries($this->ad, $result);
|
||||||
|
|
||||||
|
$ous = [];
|
||||||
|
if ($entries['count'] > 0) {
|
||||||
|
foreach ($entries as $entry) {
|
||||||
|
if (isset($entry['distinguishedname'][0])) {
|
||||||
|
$ous[] = $entry['distinguishedname'][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ous;
|
||||||
|
}
|
||||||
|
|
||||||
public function close()
|
public function close()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,7 +16,18 @@ echo "<h2>Menu</h2>";
|
|||||||
echo "<ul>";
|
echo "<ul>";
|
||||||
if ($_SESSION["is_admin"]) {
|
if ($_SESSION["is_admin"]) {
|
||||||
echo "Vous êtes un administrateur.";
|
echo "Vous êtes un administrateur.";
|
||||||
echo "Vous avez des droits sur les OUs suivantes : " . implode(", ", $_SESSION['admin_ous']);
|
echo "Vous êtes un administrateur. Vous avez des droits sur les OUs suivantes :";
|
||||||
|
echo "<ul>";
|
||||||
|
foreach ($_SESSION['admin_ous'] as $ou) {
|
||||||
|
echo "<li>$ou</li>";
|
||||||
|
}
|
||||||
|
echo "</ul>";
|
||||||
|
|
||||||
|
// Afficher les actions par OU
|
||||||
|
foreach ($_SESSION['admin_ous'] as $ou) {
|
||||||
|
echo "<h3>Gestion de $ou</h3>";
|
||||||
|
echo "<a href='list_users.php?ou=" . urlencode($ou) . "'>Gérer les utilisateurs</a>";
|
||||||
|
}
|
||||||
|
|
||||||
echo "<li><a href='views/list_users.php'>Liste des utilisateurs</a></li>";
|
echo "<li><a href='views/list_users.php'>Liste des utilisateurs</a></li>";
|
||||||
echo "<li><a href='views/add_user.php'>Ajouter un utilisateur</a></li>";
|
echo "<li><a href='views/add_user.php'>Ajouter un utilisateur</a></li>";
|
||||||
|
|||||||
Reference in New Issue
Block a user