Синхронизация пользователей: различия между версиями
м (1 версия) |
|||
Строка 1: | Строка 1: | ||
[[Категория:Функции]] | [[Категория:Функции]] | ||
+ | |||
+ | Назначение данного модуля — обеспечение взаимодействия между сторонней программой (например, системой автоматизации туроператора "САМО-тур") и Nemo в части синхронизации списка B2B-пользователей. | ||
+ | |||
+ | Модуль является компонентом, включаемым и отключаемым из административной части. | ||
+ | |||
+ | == Авторизация == | ||
+ | |||
+ | Все B2B-пользователи, загруженные через модуль взаимодействия со сторонней программой, будут иметь случайным образом сгенерированный криптостойкий пароль. Механизм авторизации работает следующим образом: | ||
+ | |||
+ | 1.Система пытается авторизовать пользователя через собственную службу авторизации. | ||
+ | 2.В случае неудачи, но присутствия в системе введенного логина, она должна попытаться авторизовать пользователя во внешней службе авторизации («САМО-тур»), при включенном компоненте взаимодействия с «САМО-тур». | ||
+ | 3.В случае неудачного опознавания пользователя выводится соответствующее сообщение и процедура может быть повторена путем повторного ввода логина и пароля. | ||
+ | |||
+ | Регистрация неудачных попыток входа производится только в двух случаях: | ||
+ | *Компонент взаимодействия выключен. | ||
+ | *Компонент взаимодействия включен и провалены обе попытки авторизации (внутренней и внешней). | ||
+ | |||
+ | Для сторонней авторизации пользователей в системе Nemo внешняя программа должна иметь веб-службу, основанную на WSDL определенного формата. Ссылка на веб-службу прописывается в настройках системы Nemo на странице конфигурации интеграции с внешней системой. | ||
+ | |||
+ | Для импортированных пользователей в Немо имеется поле «Идентификатор внешней системы», который отвечает за сопосnавление с ID пользователя в сторонней системе. Для менеджеров агентств оно равно номеру партнера (агента) во внешней системе, для пользователей — номеру пользователя в «САМО-туре». | ||
+ | |||
+ | Для пользователей, имеющих какое-либо значение в поле «идентификатор во внешней системе», запрещен функционал смены пароля или его восстановления по электронной почте. | ||
+ | |||
+ | Пример запросов и ответов на авторизацию: | ||
+ | |||
+ | '''Request''' | ||
+ | <pre><?xml version="1.0" encoding="utf-8"?> | ||
+ | <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||
+ | xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> | ||
+ | <soap12:Body> | ||
+ | <getAuthorization xmlns="http://tempuri.org/"> | ||
+ | <login>string</login> | ||
+ | <pass>string</pass> | ||
+ | </getAuthorization> | ||
+ | </soap12:Body> | ||
+ | </soap12:Envelope></pre> | ||
+ | |||
+ | '''Response''' | ||
+ | <pre><?xml version="1.0" encoding="utf-8"?> | ||
+ | <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" | ||
+ | xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> | ||
+ | <soap12:Body> | ||
+ | <getAuthorizationResponse xmlns="http://tempuri.org/"> | ||
+ | <getAuthorizationResult> | ||
+ | <session_id>string</session_id> | ||
+ | <user_id>string</user_id> | ||
+ | <login>string</login> | ||
+ | <status>string</status> | ||
+ | </getAuthorizationResult> | ||
+ | </getAuthorizationResponse> | ||
+ | </soap12:Body> | ||
+ | </soap12:Envelope></pre> | ||
+ | |||
+ | Сервис реализует функцию «getAuthorization», на вход которой передается конструкция «getAuthorizationRequest»: | ||
+ | |||
+ | *login (строка) - введенный пользователем логин | ||
+ | *pass (строка) - введенный пользователем пароль | ||
+ | |||
+ | Функция должна отдавать системе конструкцию getAuthorizationResponse: | ||
+ | |||
+ | *session_id (строка) - пустое значение | ||
+ | *user_id (строка) - идентификатор менеджера в системе «САМО-тур» | ||
+ | *login (строка) - логин пользователя (для контроля) | ||
+ | *status (строка) - может иметь значения: | ||
+ | 1. adm - администратор | ||
+ | 2. mgr - менеджер | ||
+ | 3. usr - пользователь (возвращается всегда это значение) | ||
+ | |||
+ | == Импорт и синхронизация учетных записей == | ||
+ | |||
+ | Со стороны внешней системы должно быть приложение, отправляющее в формате XML данные по учетным записям B2B-клиентов (агентств и пользователей). Со стороны Nemo имеется скрипт, который принимает XML в формате, приведенном в описании документов, передаваемых в Nemo, с ключом авторизации, определенным в Nemo в административной части модуля. | ||
+ | |||
+ | Передаваемые элементы с описанием учетных записей и партнеров имеют аккаунт (Account ID) во внешней системе и атрибут action, который может быть в состоянии update или delete, т.е. обновления/добавления и удаления, соответственно. | ||
+ | |||
+ | В административной части модуля в Nemo задается ключ авторизации для защиты от несанкционированного доступа. Значение не должно быть пустым. | ||
+ | |||
+ | Скрипт получает данные об обновлении и добавлении (проходят как одно и то же действие) или удалении информации по аккаунту. XML-данные могут содержать несколько элементов. | ||
+ | |||
+ | Описание передаваемых в Nemo XML-документов: | ||
+ | |||
+ | <pre><?xml version="1.0" encoding="UTF-8" ?> | ||
+ | <changes key="ключ_авторизации"> | ||
+ | <accounts> - список изменений по аккаунтам пользователей | ||
+ | <item id=3 partnerId=10 action="update" admin="1"> | ||
+ | <login>Логин пользователя</login> | ||
+ | </item> | ||
+ | <item id=6 partnerId=15 action="update"> | ||
+ | ... | ||
+ | </item> | ||
+ | <item id=9 partnerId=30 action="delete" /> | ||
+ | </accounts> | ||
+ | <partners> - список изменений по партнерам | ||
+ | <item id=140 action="update"> | ||
+ | <name>Название агентства</name> | ||
+ | <ofname>Официальное Название агентства</ofname> | ||
+ | <phone>Телефон</phone> | ||
+ | <tax>Форма налогообложения</tax> | ||
+ | <group>123</group> | ||
+ | <code>ABCD</item> | ||
+ | </partners></changes></code></pre> | ||
+ | |||
+ | При импорте информации об агентствах будут возвращаться следующие значения: | ||
+ | |||
+ | <table border="1"> | ||
+ | <tr class="row0" bgcolor="#CCCCCC"> | ||
+ | <th class="col0">Поле во внешней системе </th><th class="col1"> Путь к элементу xml </th><th class="col2"> Тип данных </th><th class="col3"> Сопоставляемое поле в Nemo </th><th class="col4"> Примечание </th> | ||
+ | |||
+ | </tr> | ||
+ | <tr class="row1"> | ||
+ | <td class="col0">Идентификатор партнера</td><td class="col1">/changes/partners/item[@id]</td><td class="col2 leftalign">Целое число </td><td class="col3 leftalign">Идентификатор во внешней системе для менеджера / администратора </td><td class="col4"></td> | ||
+ | </tr> | ||
+ | <tr class="row2"> | ||
+ | <td class="col0">Название юридического лица</td><td class="col1">/changes/partners/item/ofname</td><td class="col2">Строка</td><td class="col3">Полное официальное название юридического лица </td><td class="col4">Необходимо для выписки счетов юридическими лицами</td> | ||
+ | |||
+ | </tr> | ||
+ | <tr class="row3"> | ||
+ | <td class="col0">Сокращенное название</td><td class="col1">/changes/partners/item/name</td><td class="col2">Строка</td><td class="col3 leftalign">Имя агентства </td><td class="col4"></td> | ||
+ | </tr> | ||
+ | <tr class="row4"> | ||
+ | <td class="col0">Код агентства</td><td class="col1">/changes/partners/item/code</td><td class="col2">Строка</td><td class="col3">Используется при создании логина администратора</td><td class="col4"></td> | ||
+ | |||
+ | </tr> | ||
+ | <tr class="row5"> | ||
+ | <td class="col0">Номер группы в самотуре</td><td class="col1">/changes/partners/item/group</td><td class="col2">Целое число, либо пусто</td><td class="col3 leftalign">На основании таблицы сопоставлений (см. ниже) определяется, к какой группе агентство принадлежит в Nemo </td><td class="col4"></td> | ||
+ | </tr> | ||
+ | <tr class="row6"> | ||
+ | <td class="col0">Форма налогообложения</td><td class="col1">/changes/partners/item/tax</td><td class="col2">Целое число, равное идентификатору во внешней системе</td><td class="col3"></td><td class="col4"></td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | Для каждого возвращенного агентства Nemo проверяет наличие его в своей базе. Если [[агентство]] не найдено, то создается новое, для него создается менеджер (админ) с логином ABCD-1234, где ABCD – буквенный идентификатор партнера во внешней системе, 1234 — id партнера во внешней системе. Пароль генерируется случайный и криптостойкий. | ||
+ | |||
+ | Если агентство найдено, то в случае необходимости производится обновление всех полей на основании данных из внешней системы. Если изменился буквенный код агентства, то Nemo переименовывает менеджера в соответствии с новым кодом. При импорте информации о пользователях агентств в Nemo будут посылаться следующие поля: | ||
+ | |||
+ | <table border="1"> | ||
+ | <tr class="row0" bgcolor="#CCCCCC"> | ||
+ | <th class="col0">Поле во внешней системе</th><th class="col1">Путь к элементу xml</th><th class="col2">Тип данных</th><th class="col3">Сопоставляемое поле в Nemo</th><th class="col4">Примечание</th> | ||
+ | |||
+ | </tr> | ||
+ | <tr class="row1"> | ||
+ | <td class="col0">Идентификатор пользователя</td><td class="col1">/changes/accounts/item[@id]</td><td class="col2">Целое число</td><td class="col3">Идентификатор внешней системы</td><td class="col4">Храним как дополнительное поле </td> | ||
+ | </tr> | ||
+ | <tr class="row2"> | ||
+ | <td class="col0">Идентификатор партнера</td><td class="col1">/changes/accounts/item[@partnerId]</td><td class="col2">Целое число</td><td class="col3">Идентификатор внешней системы менеджера агентства</td><td class="col4"></td> | ||
+ | |||
+ | </tr> | ||
+ | <tr class="row3"> | ||
+ | <td class="col0">Логин</td><td class="col1">/changes/accounts/item/login</td><td class="col2">Строка</td><td class="col3">Логин пользователя</td><td class="col4"></td> | ||
+ | </tr> | ||
+ | <tr class="row4"> | ||
+ | <td class="col0">Администратор</td><td class="col1">/changes/accounts/item[@admin]</td><td class="col2">0 - нет, 1 - да</td><td class="col3 leftalign">Эксперт по бронированию </td><td class="col4"></td> | ||
+ | |||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | Для каждого возвращенного пользователя Nemo проверяет наличие его в своей базе. Если пользователь не найден, то создается новый. Пароль генерируется случайный и криптостойкий. | ||
+ | |||
+ | Если пользователь найден, то в случае необходимости производится обновление всех полей на основании данных из внешней системы. При запросе на удаление пользователя, в Nemo указанный логин удаляться не будет в целях сохранения целостности старых данных, а просто помечается как удаленный, и логин переименовывается и становится вида [логин_пользователя]_X_[числовой идентификатор_пользователя в Само]. | ||
+ | |||
+ | <pre><item id=[идентификатор] action="delete" /></pre> | ||
+ | |||
+ | == Таблица сопоставлений групп == | ||
+ | |||
+ | В административной части Nemo надо создать отдельную страницу, на которой можно сопоставить имеющиеся [http://mediawiki.mute-lab.com/ru/%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C#.D0.93.D1.80.D1.83.D0.BF.D0.BF.D1.8B_.D0.B2_Nemo группы в Nemo] номерам групп в САМО-тур (поле group в XML). Выводится список существующих групп для текущего (корневого) агентства. | ||
+ | |||
+ | == См. также == | ||
+ | [[Пользователь]]<br> | ||
+ | [[Авторизация]] |
Версия 15:19, 20 января 2012
Назначение данного модуля — обеспечение взаимодействия между сторонней программой (например, системой автоматизации туроператора "САМО-тур") и Nemo в части синхронизации списка B2B-пользователей.
Модуль является компонентом, включаемым и отключаемым из административной части.
Содержание
Авторизация
Все B2B-пользователи, загруженные через модуль взаимодействия со сторонней программой, будут иметь случайным образом сгенерированный криптостойкий пароль. Механизм авторизации работает следующим образом:
1.Система пытается авторизовать пользователя через собственную службу авторизации. 2.В случае неудачи, но присутствия в системе введенного логина, она должна попытаться авторизовать пользователя во внешней службе авторизации («САМО-тур»), при включенном компоненте взаимодействия с «САМО-тур». 3.В случае неудачного опознавания пользователя выводится соответствующее сообщение и процедура может быть повторена путем повторного ввода логина и пароля.
Регистрация неудачных попыток входа производится только в двух случаях:
- Компонент взаимодействия выключен.
- Компонент взаимодействия включен и провалены обе попытки авторизации (внутренней и внешней).
Для сторонней авторизации пользователей в системе Nemo внешняя программа должна иметь веб-службу, основанную на WSDL определенного формата. Ссылка на веб-службу прописывается в настройках системы Nemo на странице конфигурации интеграции с внешней системой.
Для импортированных пользователей в Немо имеется поле «Идентификатор внешней системы», который отвечает за сопосnавление с ID пользователя в сторонней системе. Для менеджеров агентств оно равно номеру партнера (агента) во внешней системе, для пользователей — номеру пользователя в «САМО-туре».
Для пользователей, имеющих какое-либо значение в поле «идентификатор во внешней системе», запрещен функционал смены пароля или его восстановления по электронной почте.
Пример запросов и ответов на авторизацию:
Request
<?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <getAuthorization xmlns="http://tempuri.org/"> <login>string</login> <pass>string</pass> </getAuthorization> </soap12:Body> </soap12:Envelope>
Response
<?xml version="1.0" encoding="utf-8"?> <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <getAuthorizationResponse xmlns="http://tempuri.org/"> <getAuthorizationResult> <session_id>string</session_id> <user_id>string</user_id> <login>string</login> <status>string</status> </getAuthorizationResult> </getAuthorizationResponse> </soap12:Body> </soap12:Envelope>
Сервис реализует функцию «getAuthorization», на вход которой передается конструкция «getAuthorizationRequest»:
- login (строка) - введенный пользователем логин
- pass (строка) - введенный пользователем пароль
Функция должна отдавать системе конструкцию getAuthorizationResponse:
- session_id (строка) - пустое значение
- user_id (строка) - идентификатор менеджера в системе «САМО-тур»
- login (строка) - логин пользователя (для контроля)
- status (строка) - может иметь значения:
1. adm - администратор 2. mgr - менеджер 3. usr - пользователь (возвращается всегда это значение)
Импорт и синхронизация учетных записей
Со стороны внешней системы должно быть приложение, отправляющее в формате XML данные по учетным записям B2B-клиентов (агентств и пользователей). Со стороны Nemo имеется скрипт, который принимает XML в формате, приведенном в описании документов, передаваемых в Nemo, с ключом авторизации, определенным в Nemo в административной части модуля.
Передаваемые элементы с описанием учетных записей и партнеров имеют аккаунт (Account ID) во внешней системе и атрибут action, который может быть в состоянии update или delete, т.е. обновления/добавления и удаления, соответственно.
В административной части модуля в Nemo задается ключ авторизации для защиты от несанкционированного доступа. Значение не должно быть пустым.
Скрипт получает данные об обновлении и добавлении (проходят как одно и то же действие) или удалении информации по аккаунту. XML-данные могут содержать несколько элементов.
Описание передаваемых в Nemo XML-документов:
<?xml version="1.0" encoding="UTF-8" ?> <changes key="ключ_авторизации"> <accounts> - список изменений по аккаунтам пользователей <item id=3 partnerId=10 action="update" admin="1"> <login>Логин пользователя</login> </item> <item id=6 partnerId=15 action="update"> ... </item> <item id=9 partnerId=30 action="delete" /> </accounts> <partners> - список изменений по партнерам <item id=140 action="update"> <name>Название агентства</name> <ofname>Официальное Название агентства</ofname> <phone>Телефон</phone> <tax>Форма налогообложения</tax> <group>123</group> <code>ABCD</item> </partners></changes></code>
При импорте информации об агентствах будут возвращаться следующие значения:
Поле во внешней системе | Путь к элементу xml | Тип данных | Сопоставляемое поле в Nemo | Примечание |
---|---|---|---|---|
Идентификатор партнера | /changes/partners/item[@id] | Целое число | Идентификатор во внешней системе для менеджера / администратора | |
Название юридического лица | /changes/partners/item/ofname | Строка | Полное официальное название юридического лица | Необходимо для выписки счетов юридическими лицами |
Сокращенное название | /changes/partners/item/name | Строка | Имя агентства | |
Код агентства | /changes/partners/item/code | Строка | Используется при создании логина администратора | |
Номер группы в самотуре | /changes/partners/item/group | Целое число, либо пусто | На основании таблицы сопоставлений (см. ниже) определяется, к какой группе агентство принадлежит в Nemo | |
Форма налогообложения | /changes/partners/item/tax | Целое число, равное идентификатору во внешней системе |
Для каждого возвращенного агентства Nemo проверяет наличие его в своей базе. Если агентство не найдено, то создается новое, для него создается менеджер (админ) с логином ABCD-1234, где ABCD – буквенный идентификатор партнера во внешней системе, 1234 — id партнера во внешней системе. Пароль генерируется случайный и криптостойкий.
Если агентство найдено, то в случае необходимости производится обновление всех полей на основании данных из внешней системы. Если изменился буквенный код агентства, то Nemo переименовывает менеджера в соответствии с новым кодом. При импорте информации о пользователях агентств в Nemo будут посылаться следующие поля:
Поле во внешней системе | Путь к элементу xml | Тип данных | Сопоставляемое поле в Nemo | Примечание |
---|---|---|---|---|
Идентификатор пользователя | /changes/accounts/item[@id] | Целое число | Идентификатор внешней системы | Храним как дополнительное поле |
Идентификатор партнера | /changes/accounts/item[@partnerId] | Целое число | Идентификатор внешней системы менеджера агентства | |
Логин | /changes/accounts/item/login | Строка | Логин пользователя | |
Администратор | /changes/accounts/item[@admin] | 0 - нет, 1 - да | Эксперт по бронированию |
Для каждого возвращенного пользователя Nemo проверяет наличие его в своей базе. Если пользователь не найден, то создается новый. Пароль генерируется случайный и криптостойкий.
Если пользователь найден, то в случае необходимости производится обновление всех полей на основании данных из внешней системы. При запросе на удаление пользователя, в Nemo указанный логин удаляться не будет в целях сохранения целостности старых данных, а просто помечается как удаленный, и логин переименовывается и становится вида [логин_пользователя]_X_[числовой идентификатор_пользователя в Само].
<item id=[идентификатор] action="delete" />
Таблица сопоставлений групп
В административной части Nemo надо создать отдельную страницу, на которой можно сопоставить имеющиеся группы в Nemo номерам групп в САМО-тур (поле group в XML). Выводится список существующих групп для текущего (корневого) агентства.