Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проверка членства пользователя Active Directory в группе из Delphi

Delphi , Файловая система , Активные директории

При разработке приложений на Delphi зачастую возникает необходимость взаимодействовать с Active Directory. Одной из распространенных задач является проверка, принадлежит ли определенный пользователь Active Directory к заданной группе. В данной статье мы рассмотрим, как это можно сделать в Delphi.

Введение в Active Directory

Active Directory (AD) — это служба каталогов, разработанная Microsoft, которая хранит и управляет информацией о ресурсах и пользователях в сетях Windows. Каталог Active Directory представляет собой иерархическую структуру, в которой объекты каталога организованы в дерево, состоящее из различных уровней.

Подключение к Active Directory из Delphi

Для работы с Active Directory в Delphi можно использовать библиотеку ADO (ActiveX Data Objects), а также компоненты, предоставляемые пакетом Indy для работы с протоколом LDAP (Lightweight Directory Access Protocol).

Первым шагом является установка соединения с сервером Active Directory. Для этого можно использовать компонент TIdTCPClient из пакета Indy, как показано в следующем примере кода:

uses
  IdTCPClient, IdGlobal;

var
  TCPClient: TIdTCPClient;
begin
  TCPClient := TIdTCPClient.Create(nil);
  try
    TCPClient.Host := 'ldap://your_server_ip';
    TCPClient.Port := 389;
    TCPClient.Connect;
  finally
    TCPClient.Free;
  end;
end;

В данном примере мы создаем экземпляр компонента TIdTCPClient, устанавливаем его свойства Host и Port, после чего вызываем метод Connect, чтобы установить соединение с сервером Active Directory.

Получение списка групп пользователя из Active Directory

После установления соединения с сервером Active Directory мы можем получить список групп, к которым принадлежит пользователь. Для этого можно использовать метод GetNetGroupUsers из компонента NLDNetAPI.pas, как было показано в альтернативном ответе.

uses
  NLDNetAPI;

var
  GroupList: TStringList;
begin
  GroupList := TStringList.Create;
  try
    GetNetGroupUsers('your_server_ip', 'your_group_name', GroupList, False, True);
    for i := 0 to GroupList.Count - 1 do
      Writeln(GroupList[i]);
  finally
    GroupList.Free;
  end;
end;

В данном примере мы создаем экземпляр TStringList, после чего вызываем метод GetNetGroupUsers, передавая ему в качестве параметров адрес сервера Active Directory, название группы и созданный экземпляр TStringList. Метод заполняет список групп, к которым принадлежит пользователь, и мы можем перебрать этот список с помощью цикла for.

Проверка членства пользователя в группе

Теперь, когда мы знаем, к каким группам принадлежит пользователь, мы можем проверить, входит ли он в нужную нам группу. Для этого можно использовать метод DsCrackNames из API Active Directory, как было показано в подтвержденном ответе.

uses
  Winapi.Windows, Winapi.ActiveDirectory;

var
  UserSID: PSID;
  GroupSID: PSID;
  dwSidLength: DWORD;
begin
  // Получаем SID пользователя
  if not DsCrackNames(nil, 'your_server_ip', 'your_user_name', 0, UserSID, dwSidLength) then
    Exit;

  // Получаем SID группы
  if not DsCrackNames(nil, 'your_server_ip', 'your_group_name', 0, GroupSID, dwSidLength) then
    Exit;

  // Проверяем, является ли SID пользователя подчиненным SID группы
  if EqualSid(UserSID, GroupSID) then
    Writeln('Пользователь принадлежит к группе');
  else
    Writeln('Пользователь не принадлежит к группе');
end;

В данном примере мы используем метод DsCrackNames, чтобы получить SID пользователя и группы. После этого мы проверяем, является ли SID пользователя подчиненным SID группы с помощью функции EqualSid. Если это так, то пользователь принадлежит к группе, и мы выводим соответствующее сообщение.

Заключение

В данной статье мы рассмотрели, как проверить членство пользователя Active Directory в группе из Delphi. Мы использовали компоненты ADO и Indy для подключения к серверу Active Directory, а также метод GetNetGroupUsers из компонента NLDNetAPI.pas для получения списка групп пользователя. Далее мы использовали метод DsCrackNames из API Active Directory, чтобы проверить, принадлежит ли пользователь к нужной нам группе.

Создано по материалам из источника по ссылке.

В статье рассматривается, как проверить членство пользователя Active Directory в группе из Delphi с использованием компонентов ADO, Indy и API Active Directory.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Активные директории ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:18:18/0.0034031867980957/0