Настройка правил синхронизации служб каталогов

Сервер BOOCO Meteor (v 1.x) / Настройка работы со службами каталогов

В последних версиях появилась возможность гибко настраивать правила синхронизации служб каталогов. В пользовательском интерфейсе эта функция отсутствует.

Для настройки правил синхронизации служб каталогов нужно:

  • внести данные напрямую в Mongo DB либо экспортировать триггеры в JSON-файл;
  • внести изменение в триггер синхронизации и затем импортировать JSON-файл.

Экспорт и импорт триггеров с помощью файла в формате JSON можно выполнить на странице Дополнительные инструменты (Триггеры и правила → Инструменты), используя кнопки Экспорт и Импорт в разделе Операции с коллекциями.

Чтобы включить новый механизм синхронизации, нужно добавить массив rules в поле action триггера синхронизации службы каталога. Список атрибутов указывать не нужно. Этот список будет сформирован автоматически в соответствии со списком правил синхронизации.

Каждое правило синхронизации может содержать следующие поля:

  • source — имя атрибута службы каталогов;
  • match — строка или регулярное выражение, которое будет применяться к исходному атрибуту (если поле пустое или отсутствует, то подходят любые значения);
  • collection — имя коллекции, в которую производится запись (если не указана, то берется коллекция users);
  • target — поле в коллекции, которое нужно обновить;
  • value — значение, которое нужно записать в поле target. Значение может быть абсолютным либо может содержать один или несколько атрибутов службы каталогов (в этом случае они указываются в фигурных скобках, например: “BOOCO\{sAMAccountName}”). Если value отсутствует или пустое, то берется значение атрибута source;
  • type — тип значения: string (по умолчанию), array, object. Если тип object, то в качестве имени поля используется имя атрибута — source, а в качестве значения — его значение;
  • action — действие, которое применяется в правиле:
    • set (по умолчанию) — устанавливает значение в поле source;
    • add — устанавливает или добавляет значение в поле target;
    • skip — указывает, что нужно пропустить данную учетную запись в службе каталогов.

Правила выполняются в порядке их следования.

Пример использования правил:

[   
  /* Установить роль user всем пользователям */  
  { "source": "name", "target": "profile.roles", "value": "user", "type": "array" },  

  /* Добавить роль admin всем пользователям из отдела, имя которого содержит IT*/ 
  { "source": "department", "target": "profile.roles", "match": "IT", "value": "admin", "action": "add" }

  /* Синхронизировать департамент */  
  { "source": "department", "target": "profile.department" },  
  
  /* Синхронизировать должность */  
  { "source": "title", "target": "profile.title" }, 
 
  /* Установить имя пользователя в профиле */  
  { "source": "cn", "target": "profile.fullname", "match": "/^.+$/" },  

  /* Установить имя пользователя в профиле (переписывает предыдущее значение) */ 
  { "source": "name", "target": "profile.fullname", "match": "/^.+$/" },  

  /* Установить email, если mail не пустой */ 
  { "source": "mail", "target": "email", "match": "/^.+$/" }, 

  /* Установить email, если email не пустой (переписывает предыдущее значение) */  
  { "source": "email", "target": "email", "match": "/^.+$/" },  

  /* Установить login пользователя = userPrincipalName (если не пустой) */  
  { "source": "userPrincipalName", "target": "username", "match": "/^.+$/" },  

  /* Установить login пользователя = BOOCO\\{sAMAccountName (переписывает предыдущее значение) */  
  { "source": "sAMAccountName", "target": "username", "value": "BOOCO\\{sAMAccountName}" },  

  /* Синхронизировать мобильный телефон */  
  { "source": "mobile", "target": "profile.mobile" },  

  /* Синхронизировать рабочий телефон */  
  { "source": "telephoneNumber", "target": "profile.phone" },  

  /* Синхронизировать фотографию пользователя (сильно увеличивает время синхронизации!!!) */  
  { "source": "thumbnailPhoto", "target": "profile.photo" },  

  /* Добавляет название департамента в коллекцию departments */  
  { "source": "department", "target": "name", "collection": "departments", "match": "/^.+$/" },  

  /* Пропустить, если поле email пустое */  
  { "source": "email", "match": "/^$/", "action": "skip" }
];