Синхронизация Authorities

Синхронизация Пользователей или Групп с Citeck.

Синхронизация выполняется на стороне микросрвиса ecos-model.
Настройка осуществляется через журнал Модель -> Синхронизация или деплой соответствующего артифакта authorities-sync.

Общие атрибуты

{
    "id": "emodel-ldap-person-sync",
    "name": {
        "ru": "Пользователи из LDAP",
        "en": "Persons from LDAP"
    },
    "type": "emodel-ldap",
    "repeatDelayDuration": "PT10S",
    "enabled": true,
    "config": {},
    "version": 1,
    "authorityType": "PERSON",
    "manageNewAuthorities": true
}
Описание общих атрибутов

Атрибут

Описание

id

Идентификатор синхронизации

name

Название синхронизации

type

Тип синхронизации. См. Типы синхронизации

repeatDelayDuration

Периодичность синхронизации (PT10S - каждые 10 секунд)

enabled

Включена ли синхронизация

config

Конфигурация синхронизации специфичная для каждого типа синхронизации

version

Версия синхронизации. При изменении конфигурации синхронизации, необходимо увеличить версию

authorityType

Тип синхронизируемых объектов, возможные значения - PERSON, GROUP

manageNewAuthorities

TODO: fill @pavel.simonov

Типы синхронизаций

Синхронизация пользователей из Alfresco

Тип: alfresco

Пример конфигурации:

{
    "id": "alfresco-persons-sync",
    "name": {
        "ru": "Пользователи из Alfresco",
        "en": "Persons from Alfresco"
    },
    "type": "alfresco",
    "repeatDelayDuration": "PT10S",
    "enabled": true,
    "config": {
        "batchSize": 30,
        "attributes": {
            "firstName": "cm:firstName",
            "middleName": "cm:middleName",
            "personDisabled": "ecos:isPersonDisabled",
            "photoCacheKey": "ecos:photo.contentUrl|presuf(\"v2-\")",
            "workingCalendar": "org:workingCalendar?id"
        }
    },
    "version": 1,
    "authorityType": "PERSON",
    "manageNewAuthorities": true
}
Описание атрибутов конфигурации синхронизации пользователей из Alfresco

Атрибут

Описание

batchSize

Размер пакета для синхронизации

attributes

Список атрибутов для синхронизации. Ключ - имя атрибута в Citeck, значение - атрибут в Alfresco

Синхронизация групп из Alfresco

Тип: alfresco

Пример конфигурации:

{
    "id": "alfresco-groups-sync",
    "name": {
        "ru": "Группы из Alfresco",
        "en": "Groups from Alfresco"
    },
    "type": "alfresco",
    "repeatDelayDuration": "PT10S",
    "enabled": true,
    "config": {
        "batchSize": 30,
        "attributes": {
            "name": "cm:authorityDisplayName",
            "roleType": "org:roleType",
            "branchType": "org:branchType",
            "roleSubType": "org:roleTypeAssoc.cm:name",
            "branchSubType": "org:branchTypeAssoc.cm:name",
            "roleIsManager": "org:roleTypeAssoc.org:roleIsManager?bool",
            "authorityGroups": "assoc_src_cm:member[].cm:authorityName|rxg(\"GROUP_(.+)\")|presuf(\"emodel/authority-group@\")"
        }
    },
    "version": 3,
    "authorityType": "GROUP",
    "manageNewAuthorities": true
}
Описание атрибутов конфигурации синхронизации групп из Alfresco

Атрибут

Описание

batchSize

Размер пакета для синхронизации

attributes

Список атрибутов для синхронизации. Ключ - имя атрибута в Citeck, значение - атрибут в Alfresco

Синхронизация пользователей из LDAP

Тип: emodel-ldap

Примечание

Доступно только в enterprise версии

Подключение к LDAP осуществляется через Spring LDAP.
Вы можете создать несколько конфигураций синхронизации, указав различные настройки - например, сервера, домены, фильтры и т.д.

Пример конфигурации:

{
    "id": "emodel-ldap-person-sync",
    "name": {
        "ru": "Пользователи из LDAP",
        "en": "Persons from LDAP"
    },
    "type": "emodel-ldap",
    "repeatDelayDuration": "PT5M",
    "enabled": true,
    "config": {
            "batchSize": 100,
            "usernameAttributeName": "uid",
            "modifyTimestampAttName": "modifyTimestamp",
            "modifyTimestampFormat": "yyyyMMddHHmmss'Z'",
            "attributes": {
                "email": "mail",
                "lastName": "sn",
                "firstName": "givenname"
            },
            "ldapSearch": {
                "filter": "(objectClass=person)"
            },
            "differential": true,
            "ldapConnection": {
                "base": "dc=example,dc=org",
                "urls": [
                    "ldap://localhost:389"
                ],
                "credentials": "ldap-cred"
            }
    },
    "version": 1,
    "authorityType": "PERSON",
    "manageNewAuthorities": true
}
Описание атрибутов конфигурации синхронизации пользователей из LDAP

Атрибут

Описание

batchSize

Размер пакета для синхронизации

usernameAttributeName

Атрибут LDAP, содержащий имя пользователя (username), должно быть уникальным в системе. По умолчанию - uid

modifyTimestampAttName

Атрибут LDAP, содержащий время последнего изменения пользователя, необходим для дифференциальной синхронизации. По умолчанию - modifyTimestamp

modifyTimestampFormat

Формат времени последнего изменения пользователя в LDAP (значения атрибута modifyTimestampAttName). По умолчанию - yyyyMMddHHmmss'Z'

attributes

Список атрибутов для синхронизации. Ключ - имя атрибута в Citeck, значение - атрибут в LDAP

differential

Флаг, указывающий на необходимость синхронизации только измененных пользователей

ldapSearch

Параметры поиска
  • base - базовый DN для поиска

  • filer - фильтр для поиска

  • scope - область поиска. Допустимые значения: BASE, ONE_LEVEL, SUBTREE

ldapConnection

Параметры подключения к LDAP серверу
  • base - базовый DN подключения

  • urls - список URL серверов

  • credentials - идентификатор credentials для подключения к LDAP серверу (сейчас это credentials из мкр. ecos-integrations)

Примечание

Если включена дифференциальная синхронизация и была изменена конфигурация с повышением версии, то первая синхронизация после изменения будет полной.

Удаление пользователей

Для новой логики синхронизации пользователей из LDAP был добавлен дополнительный функционал с удаления пользователя из Citeck если он был удален в LDAP.
В конфигурацию lDAP добавлен новый параметр config.allowDeletions (true/false).
Пример полной конфигурации:

{
    "id": "emodel-ldap-person-sync-with-delete",
    "name": {
        "ru": "Пользователи из LDAP c удалением",
        "en": "Persons from LDAP with allowed deletion"
    },
    "type": "emodel-ldap",
    "repeatDelayDuration": "PT5M",
    "enabled": true,
    "config": {
            "batchSize": 100,
            "usernameAttributeName": "uid",
            "modifyTimestampAttName": "modifyTimestamp",
            "modifyTimestampFormat": "yyyyMMddHHmmss'Z'",
            "attributes": {
                "email": "mail",
                "lastName": "sn",
                "firstName": "givenname"
            },
            "ldapSearch": {
                "filter": "(objectClass=person)"
            },
            "differential": false,
            "allowDeletions": true,
            "ldapConnection": {
                "base": "dc=example,dc=org",
                "urls": [
                    "ldap://localhost:389"
                ],
                "credentials": "ldap-cred"
            }
    },
    "version": 1,
    "authorityType": "PERSON",
    "manageNewAuthorities": true
}

Логика:

  1. При синхронизации пользователей из LDAP пользователю добавляются дополнительные два атрибута:

    • ldap-sync:lastLdapSyncDate - дата последней синхронизации текущего пользователя с LDAP;

    • ldap-sync:ldapSyncId - id конфигурации с LDAP синхронизацией (для понимания того какая именно синхронизация добавила или последний раз обновила пользователя), например, в примере выше это свойство будет равно emodel-ldap-person-sync-with-delete

  2. При повторной синхронизации, мы обновляем всех пользователей, данные по которым пришли из LDAP, и если у нас остались пользователи, которые не обновлялись (т.е. были удалены из LDAP и по ним не пришло никаких данных), то при флаге allowDeletions = true такие пользователи удаляются из Citeck.

    Если флаг allowDeletions = false, то логика никак не меняется, пользователи остаются в ECOS даже если были удалены из LDAP.

Важные замечания:

  1. Флаги allowDeletions и differential не могут быть true одновременно, корректных пользователей на удаление мы можем определить только если происходит полная синхронизация (differential = false).

  2. Если флаг allowDeletions = true, то крайне не рекомендуется менять поисковый запрос (ldapSearch) при наличии уже синхронизированных пользователей, иначе можно потерять данные (если требуется изменить запрос, то нужно убедится что в новый запрос входят все пользователи из старого или allowDeletions = false, если не хотим терять пользователей синхронизированных из LDAP).