
- •Глава 1. Постановка задачи, формирование требований к системе 8
- •Глава 2. Проектирование архитектуры системы и описание логики взаимодействия ее компонентов 16
- •Глава 3. Разработка 31
- •Список сокращений и условных обозначений
- •Введение
- •Глава 1. Постановка задачи, формирование требований к системе
- •1.1 Функциональные и нефункциональные требования к системе
- •1.1.1 Функциональные требования
- •1.1.2 Нефункциональные требования
- •Глава 2. Проектирование архитектуры системы и описание логики взаимодействия ее компонентов
- •2.1 Системная архитектура
- •2.2 Взаимодействие с бэкендом
- •2.3 Интеграция с Access Control и pip Service
- •2.3.1 Конфигурация прав доступа в Access Control
- •2.3.2 Конфигурация расширенных прав доступа в pip Service
- •2.4 Микрофронтенд архитектура
- •2.4.1 Microservices ui Platform Framework
- •2.5 Архитектура данных
- •Глава 3. Разработка
- •3.1 Создание и регистрация Hiring фрагмента
- •3.2. Создание пользовательской роли hr Hiring
- •3.3. Маршрутизация
- •3.3.1 Hiring в глобальном меню Host Application
- •3.3.2 Маршрутизация в Hiring
- •3.4 Vault ldap-аутентификация
- •3.5 Примеры реализации функциональности компонентов системы
- •3.5.1 Создание Hiring Request’а
- •3.5.1.1 Отправка формы по нажатию кнопки “Submit”
- •3.5.2 Поиск Hiring Request’а по названию
- •3.5.3 Настройка видимости колонок таблиц дашбордов
- •3.5.4 Оправка нотификации “Send to Payroll Group”
- •3.5.5 Работа с документами
- •3.6 Выдача прав доступа
- •3.7 Модули проекта
- •3.8 Демонстрация интерфейса веб-приложения
- •3.9 Тестирование
- •Заключение
- •Список использованных источников
- •Приложение а
3.4 Vault ldap-аутентификация
При инициализации компонента FactoryComponent вызывается метод сервиса VaultService – vaultLogin() (рисунок 12), реализация которого частично представлена на рисунке 15. На момент создания Hiring фрагмента пользователь уже аутентифицирован с помощью Identity Provider и авторизован, однако, поскольку в Hiring содержатся конфиденциальные данные, для обеспечения безопасного доступа к ним при инициализации фрагмента пользователь повторно аутентифицируется через Vault, тем самым получая доступ к зашифрованным данным Hiring микросервиса и документам абстрактного файлового хранилища File Storage.
Рисунок 15 – vaultLogin()
Форма Vault-авторизации и методы, обрабатывающие связанные с ней события, были реализованы в Host Application: на рисунке 16 изображен метод getUserToken(), вызываемый при нажатии кнопки “Submit” формы. Данный метод отправляет POST запрос с логином и паролем пользователя, возвращающий client vault токен при успешном выполнении, и генерируют событие vaultLoginSubject, на которое осуществлена подписка в Hiring микрофронтенде (рисунок 15).
Рисунок 16 – getUserToken()
После того как был получен vault client токен, для получения доступа к зашифрованным данным Hiring и File Storage в методе vaultLogin() (рисунок 15), для Hiring и File Storage соответственно, вызываются методы getWrappedToken() (рисунок 17) и initEngine(), выполняющий POST запрос для регистрации полученного токена.
Рисунок 17 – getWrappedToken()
3.5 Примеры реализации функциональности компонентов системы
3.5.1 Создание Hiring Request’а
Создание нового Hiring Request’а было реализовано следующим образом: по нажатию кнопки “Add new” открывается всплывающее окно, реализованное в компоненте “Requests in Progress”, шаблоном которого является другой Angular компонент “New Hiring Request Wizard”, который в свою очередь является родительским компонентом для “First Step” и “Second Step” компонентов. Такая реализация позволила разделить ответственность между компонентами и сохранить читаемость кода. На рисунках 18 и 19 продемонстрировано реализованное с помощью описанных выше компонентов окно Wizard’а.
Рисунок 18 – Wizard Step 1
Рисунок 19 – Wizard Step 2
Компонент “New Hiring Request Wizard” несет ответственность за реализацию следующей логики:
Инициализация объекта реактивной формы, ее элементов и валидаторов. Форма передается из родительского компонента дочерним с помощью использования декоратора @Input,
Валидация данных, заполненных на первом и втором шагах Wizard’а, а также логика появления всплывающих окон, информирующих о необходимости заполнения пустых полей,
Навигация между первым и вторым шагами Wizard’а,
Изменение размера Wizard’а при изменении размера окна (реализовано с помощью использования декоратора @HostListener, прослушивающего DOM событие “window: resize”),
Отмена создания Hiring Request’а,
Отправка формы, т. е. фактическое создание Hiring Request’а,
Логика проверки создаваемого Hiring Request’а на уникальность.
Компоненты “First Step” и “Second Step” определяют поля ввода Wizard’а и их параметры, реализуют логику получения значений полей выпадающих списков и логику поиска по их значениям.