При разработке приложений на 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, как показано в следующем примере кода:
В данном примере мы создаем экземпляр компонента 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