Формулировка проблемы: на данный момент с
импортом пользователей из каталогов LDAP
в
Arta Synergy
имеется две проблемы:
В LDAP
-каталоге имеется возможность назначить
произвольные атрибуты любому объекту, в том числе тем объектам,
которые мы забираем в Arta Synergy
в качестве
пользователей (например, номер телефона, дату рождения и т. д.).
В Arta Synergy
также имеется возможность
назначить произвольные атрибуты пользователям (через
функциональность «карточки пользователей», однако никакой
возможности передать в Synergy
произвольные
атрибуты LDAP
и записать их в карточку
пользователя нет.
Нет возможность сопоставить пользователя LDAP
пользователю Arta Synergy
, кроме как по его
идентификатору в Arta Synergy
. Это создаёт
проблему в том случае, если необходимо произвести импорт
пользователей из каталога LDAP
таким образом,
чтобы уже имеющиеся в Arta Synergy
пользователи не были продублированы и оказались связаны с их
правильными эквивалентами в LDAP
.
Решение: необходимо модифицировать функциональность «импорт пользователей из LDAP», добавив туда следующие возможности:
Указание сопоставления полей одной либо нескольких карточек
пользователей полям, возвращаемым поиском по указанному для
учётных записей пользователей фильтром LDAP
.
Указание поля, по которому необходимо сравнивать пользователя
Arta Synergy
с объектом, полученным из
LDAP
.
Реализация этих изменений должна быть отражена в конфигурационном
файле синхронизации с Arta Synergy
(configuration/arta/ldap-sync.xml
— изменённые
части выделены тёмно-серым):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- В конфигурацию должна быть внесена опция версии конфигурационного файла для сохранения совместимости с предыдущим механизмом синхронизации и старыми установками Arta Synergy --> <configuration xmlns="http://www.arta.kz/xml/ns/as/ldap-sync" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version= "2" xsi:schemaLocation="http://www.arta.kz/xml/ns/as/ldap-sync ldap-sync_2.xsd"> <!-- Наборы синхронизации, таких может быть несколько --> <item> <!-- id синхронизации --> <id>1</id> <!-- домен --> <domain>test.ldap.com</domain> <!-- синхронизация --> <sync> <!-- LDAP хост --> <host>10.20.30.1</host> <!-- учетная запись для подключения к каталогу LDAP --> <user-dn>cn=syncuser,dc=test,dc=ldap,dc=com</user-dn> <!-- пароль --> <password>password</password> <!-- активно, неактивно --> <active>false</active> <!-- интервал синхронизации в мс --> <interval>1800000</interval> <!-- следовать ссылкам --> <referral>ignore</referral> </sync> <!-- доступ --> <access> <!-- группа доступа --> <!-- значение userAccountControl в этом поле указывает на поле "Активен" в AD, вместо него можно использовать просто группу --> <allow>cn=aiusers,ou=Groups,ou=People,dc=test,dc=ldap,dc=com</allow> <!-- группа админов --> <admin>cn=aiadmin,ou=Groups,ou=People,dc=test,dc=ldap,dc=com</admin> </access> <!-- пользователи --> <user> <!-- базовый узел поиска в LDAP --> <base>dc=test,dc=ldap,dc=com</base> <!-- фильтр --> <filter>(objectClass=inetOrgPerson)</filter> <!-- По какому полю сравнивать пользователей --> <identity> <!-- Откуда из Synergy брать поле для сравнения, из учётной записи --> <source type="account"/> <!-- либо из произвольной карточки <source type="personalrecord" id="id личной карточки"/> --> <!-- Поля для сравнения. Блок id может быть только один в этом блоке. --> <id> <!-- Идентификатор поля Synergy. Для типа источника account возможные значения: id, login, email. Для типа источника personalrecord — идентификатор поля формы карточки пользователя. --> <synergy>id</synergy> <!-- Поле id пользователя из LDAP, если пусто - будет использоваться md5 от DN объекта. Eсли указанное поле отсутствует в импортируемом объекте, либо оно является пустым, то импорт этого объекта не производится, о чём делается запись в лог --> <ldap></ldap> </id> </identity> <!-- Сопоставление полей учётной записи --> <account> <!-- поле логин --> <login>cn</login> <!-- поле имя --> <firstname>firstName</firstname> <!-- поле отчество --> <middlename>middleName</middlename> <!-- поле фамилия --> <lastname>sn</lastname> <!-- поле почта --> <email>mail</email> </account> <!-- Сопоставление полей карточки пользователя. Блоков personalrecord может быть несколько --> <personalrecord> <!-- Идентификатор карточки пользователя. Обязательно должен быть непустым → <id>какой-то id</id> <!-- Блок field указывает на связь поля из LDAP с полем карточки пользователя. Таких блоков может быть несколько --> <field> <ldap>IIN</ldap> <synergy>form-iin</synergy> </field> </personalrecord> </user> <!-- группы --> <group> <!-- базовый узел --> <base>dc=test,dc=ldap,dc=com</base> <!-- фильтр --> <filter>(objectClass=groupOfNames)</filter> <!-- поле id группы, если пусто - будет использоваться hashCode от DN (как раньше было), иначе hashCode от поля --> <id></id> <!-- поле имя --> <name>cn</name> <!-- поле члены --> <member>member</member> </group> </item> </configuration>
Блок данные сопоставления полей из блока
identity/
также используются для внесения данных
из указанного там поля LDAP
в поле личной
карточки — в том случае, если подходящий пользователь в
Arta Synergy
не найден, и создаётся новый
пользователь.