Компонент Ldap¶
Компонент Ldap предоставляет способы для соединения с LDAP-сервером (OpenLDAP или Активным каталогом).
Установка¶
1 | $ composer require symfony/ldap
|
Также вы можете клонировать репозиторий https://github.com/symfony/ldap.
Note
If you install this component outside of a Symfony application, you must
require the vendor/autoload.php
file in your code to enable the class
autoloading mechanism provided by Composer. Read
this article for more details.
Использование¶
Класс Ldap
предоставляет методы для аутентификации
и запросов к LDAP-серверу.
Класс Ldap
использует AdapterInterface
,
чтобы общаться с LDAP-сервером. adapter
для встроенного расширения LDAP PHP, к примеру, может быть сконфигурирован, используя
следующие опции:
host
- IP или имя хоста LDAP-сервера
port
Порт, используемый для доступа к LDAP-серверу
version
- Версия LDAP-протокола для использования
encryption
- Протокол шифрования:
ssl
,tls
илиnone
(по умолчанию) connection_string
- Ві можете использовать эту опцию вместо
host
иport
, чтобы подключиться к LDAP-серверу optReferrals
- Указывает, следовать ли автоматически по ссылкам, возвращённым LDAP-сервером
options
- Опции LDAP-сервера, определённые в
ConnectionOptions
Например, чтобы присоединиться к start-TLS защищённому LDAP-серверу:
1 2 3 4 5 6 | use Symfony\Component\Ldap\Ldap;
$ldap = Ldap::create('ext_ldap', array(
'host' => 'my-server',
'encryption' => 'ssl',
));
|
Или вы можете напрямую указать строку подключения:
1 2 3 | use Symfony\Component\Ldap\Ldap;
$ldap = Ldap::create('ext_ldap', array('connection_string' => 'ldaps://my-server:636'));
|
Метод bind()
аутентифицирует
ранее сконфигурированную связь, используя как различимое имя (РИ), так
и пароль пользователя:
1 2 3 4 | use Symfony\Component\Ldap\Ldap;
// ...
$ldap->bind($dn, $password);
|
После привязки (или если вы включили анонимную аутентификацию на вашем
LDAP-сервере), вы можете запросить LDAP-сервер, используя метод
find()
:
1 2 3 4 5 6 7 8 9 | use Symfony\Component\Ldap\Ldap;
// ...
$query = $ldap->query('dc=symfony,dc=com', '(&(objectclass=person)(ou=Maintainers))');
$results = $query->execute();
foreach ($results as $entry) {
// Сделать что-то с результатами
}
|
По умолчанию, записи LDAP загружаются лениво. Если вы хотите
извлечь все сущности за один вызов и сделать что-то с массивом
результатов, вы можете использовать метод
toArray()
:
1 2 3 4 5 6 7 | use Symfony\Component\Ldap\Ldap;
// ...
$query = $ldap->query('dc=symfony,dc=com', '(&(objectclass=person)(ou=Maintainers))');
$results = $query->execute()->toArray();
// Сделать что-то с массивом результатов
|
Создание или обновление записей¶
Компонент Ldap предоставляет инструменты для создания, обновления или даже удаления LDAP записей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | use Symfony\Component\Ldap\Ldap;
use Symfony\Component\Ldap\Entry;
// ...
$entry = new Entry('cn=Fabien Potencier,dc=symfony,dc=com', array(
'sn' => array('fabpot'),
'objectClass' => array('inetOrgPerson'),
));
$entryManager = $ldap->getEntryManager();
// Создание новой записи
$entryManager->add($entry);
// Поиск и обновление существующей записи
$query = $ldap->query('dc=symfony,dc=com', '(&(objectclass=person)(ou=Maintainers))');
$result = $query->execute();
$entry = $result[0];
$entry->setAttribute('email', array('[email protected]'));
$entryManager->update($entry);
// Добавление или удаление значений аттрибутам с несколькими значениями более эффективно, чем использование update()
$entityManager->addAttributeValues($entry, 'telephoneNumber', array('+1.111.222.3333', '+1.222.333.4444'));
$entityManager->removeAttributeValues($entry, 'telephoneNumber', array('+1.111.222.3333', '+1.222.333.4444'));
// Удаление существующей записи
$entryManager->remove(new Entry('cn=Test User,dc=symfony,dc=com'));
|
Массовое обновление¶
Используйте метод менеджера записей applyOperations()
для обновления нескольких аттрибутов за раз:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | use Symfony\Component\Ldap\Ldap;
use Symfony\Component\Ldap\Entry;
// ...
$entry = new Entry('cn=Fabien Potencier,dc=symfony,dc=com', array(
'sn' => array('fabpot'),
'objectClass' => array('inetOrgPerson'),
));
$entryManager = $ldap->getEntryManager();
// Добавление нескольких email адресов за раз
$entryManager->applyOperations($entry->getDn(), array(
new UpdateOpteration(LDAP_MODIFY_BATCH_ADD, 'mail', '[email protected]'),
new UpdateOpteration(LDAP_MODIFY_BATCH_ADD, 'mail', '[email protected]'),
));
|
Возможные типы операций: LDAP_MODIFY_BATCH_ADD
, LDAP_MODIFY_BATCH_REMOVE
,
LDAP_MODIFY_BATCH_REMOVE_ALL
, LDAP_MODIFY_BATCH_REPLACE
. Параметр
$values
должен быть NULL
при использовании типа операции
LDAP_MODIFY_BATCH_REMOVE_ALL
.
New in version 4.2: Метод applyOperations()
появился в Symfony 4.2.
New in version 4.1: Методы addAttributeValues()
и removeAttributeValues()
появились в Symfony 4.1.
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.