Формулировка проблемы: на данный момент с
импортом пользователей из каталогов 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 не найден, и создаётся новый
пользователь.