Задача [INT2]: Доработка интеграции LDAP → Synergy: заполнение дополнительных карточек пользователя, настройка сопоставления пользователей и групп по произвольному полю

Формулировка проблемы: на данный момент с импортом пользователей из каталогов LDAP в Arta Synergy имеется две проблемы:

  1. В LDAP-каталоге имеется возможность назначить произвольные атрибуты любому объекту, в том числе тем объектам, которые мы забираем в Arta Synergy в качестве пользователей (например, номер телефона, дату рождения и т. д.). В Arta Synergy также имеется возможность назначить произвольные атрибуты пользователям (через функциональность «карточки пользователей», однако никакой возможности передать в Synergy произвольные атрибуты LDAP и записать их в карточку пользователя нет.

  2. Нет возможность сопоставить пользователя LDAP пользователю Arta Synergy, кроме как по его идентификатору в Arta Synergy. Это создаёт проблему в том случае, если необходимо произвести импорт пользователей из каталога LDAP таким образом, чтобы уже имеющиеся в Arta Synergy пользователи не были продублированы и оказались связаны с их правильными эквивалентами в LDAP.

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