WSO2 Identity Server 5.1.0 Workflow

У выходу готовится новая версия  WSO2 Identity Server 5.1.0  и сегодня я хочу рассказать об одной новой, достаточно интересной новой функции - поддержке Workflow (информацию о данной фиче я подсмотрел на сайте самой компании  WSO2.

Вообще-то поддержка workflow (например при добавлении пользователя) относительно стандартная фича - например в том же Liferay она есть - но в данном случае WSO2 пошли по своему пути:

  1. Они распределяют функциональность по продуктам - есть у них WSO2 Business Process Server - значит реализацию workflow возлагают на него.
  2. Workflow поддерживается не только для добавления пользователя - но и широкого спектра действий (добавление-удаление-редактирование пользователей, ролей и прочее).

Но обо всем по порядку.

Для того что бы рассмотреть пример нам потребуется WSO2 IS версии 5.1.0 (она еще не вышла - так что можно тут http://www.emdev.ru/-/gde-brat-beta-versii-produktov-wso2 посмотреть где можно взять бета-версию) и WSO2 Business Process Server 3.2.0 (живет тут: http://wso2.com/products/business-process-server/)

Установка и базовая настройка продуктов

Скачиваем и распаковываем продукты соотвественно в папки WSO2IS_HOME  и WSO2BPS_HOME. Подробней про базовую установку продуктов WSO2 можно почитать в одном из предыдущих постов: http://www.emdev.ru/-/bazovye-sagi-po-ustanovke-produktov-wso2

Для того что бы сервера не конфликтовали по портам запускаем wso2bps со сдвигом 1 (редактируем WSO2BPS_HOME/repository/conf/carbon.xml и изменяем Offset на 1)

Так же нам надо, что бы оба сервера использовали единую базу пользователей. Так как WSO2IS уже идет со встроенным LDAP сервером просто учим WSO2 BPS использовать его - редактируем WSO2BPS_HOME/repository/conf/user-mgt.xml и раскомментируем 

<!--UserStoreManager class="org.wso2.carbon.user.core.ldap.ReadWriteLDAPUserStoreManager">

при этом не забываем проверить что бы был правильно прописан порт в теге 

<Property name="ConnectionURL">ldap://localhost:10389</Property>

и комментируем втроенную базу пользователей:

<UserStoreManager class="org.wso2.carbon.user.core.jdbc.JDBCUserStoreManager">

Запускаем оба сервера:

  • WSO2 IS доступен по адресу https://localhost:9443/carbon
  • WSO2 BPS соответственно по адресу https://localhost:9444/carbon

пользователь везде admin, пароль тоже admin.

Настройка пользователей и ролей

Для того что бы продемонстрировать работу workflow нам потребуется создать роль senior_hr_manager - это сотрудник который будет согласовывать добавление пользователя

 И дадим этой роли разрешение на вход в систему

Создадим пользователя (alice) и назначим на эту роль

Готово - можно приступать непосредственно к настройке работы с workflow

Интеграция с WSO2 BPS

Для того, что бы WSO2 IS мог отправлять задачи на обработку в  WSO2 BPS надо прописать BPS сервер в конфигурации WSO2 IS:

  • Configure > BPS Profiles > Add -  и добавляем новый сервер

  • В качестве имени указываем любое
  • BPS Host : https://localhost:9444 - урл нашего  BPS сервера
  • username/password везде указываем admin/admin

Создание Workflow

Теперь добавим Workflow:

  • Main > Manage > Workflows > Add (имя и описание могут быть в принципе любые)

  • Жмем Next - определяем роль, которая будет отвечать за шаг согласования

  •  Next -  выбираем сервер на котором будет выполняться Workflow и задаем subject и body для уведомления

Готово. Обратите внимание - после добавления Workflow в WSO2IS оно будет задеплоено в WSO2 BPS и появится там в списке доступных процессов

Привязка процесса к действию

Теперь надо указать WSO2IS в каких случаях мы должны вызывать указанный процесс:

  • Main > Manage > Workflow Engagements > Add

  • Имя указываем любое
  • Operation Category - User Store Operations
  • Operation Name - Add User ( в списке вы увидите все действия на которые можно "навесть" процесс)
  • Apply To All Requests (на самом деле можно настроить условия, при которых процесс стартует или нет).

Готово. Можно тестировать

Тест

Идем админом и пробуем создать пользователя (например bob). После создания пользователь отобразится в списке - но при этом все действия для него недоступны

При этом, если мы посмотрим в админке  WSO2 BPS - то увидим что у нас появился новый экземпляр процесса

Если мы зайдем теперь пользователем alice в Dashboard: https://localhost:9443/dashboard - то мы увидим задачу на согласование добавления пользователя

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