Мигратор ролей#
Для синхронизации ролей из библиотек и проектов был разработан Мигратор ролей. Этот функционал позволяет определить в библиотеках роли, необходимые для работы библиотеки на проекте, а затем удобно синхронизировать их на проекте, исключая необходимость ручного создания и вложения ролей.
Определение в библиотеке#
Для начала необходимо создать файл source/roles.json в проекте библиотеки. Этот файл должен содержать описание ролей в формате JSON. Каждая роль представляется объектом, где ключ — это название роли, а значение — объект с описанием роли и вложенными ролями. Рекомендуется описывать роли по порядку: сперва сама роль, а затем роль, где данная роль является вложенной.
source/roles.json
Определение в проекте#
Чтобы мигратор ролей работал корректно, необходимо создать файл source/roles.js. Данный файл является обычным JavaScript файлом, который должен возвращать массив объектов с ролями. Каждый элемент массива представляет собой объект, в котором на верхнем уровне указаны модуль или проект, откуда берутся роли. Значением этого объекта является описание ролей, аналогичное тому, что представлено в файле roles.json. Допускается любая предобработка данного массива, включая фильтрацию, удаление и добавление ролей.
В качестве примера, в данном файле модуль или проект называется current_project. Внутри этого объекта описана роль super1, которая имеет следующее описание: 'роль super1'.
Пример файла roles.js
Миграция#
Пользователь нажимает кнопку Загрузить на экранной форме. В этот момент происходит считывание данных из файлов roles.json и roles.js, и все роли загружаются в таблицу на форме. В таблице отображаются названия ролей, их описания, вложенные роли и источник. Работа производится по аналогии с Обновлением БД.
Загрузка#
При загрузке отображаются только те роли, которые необходимо создать или обновить: 1. Роль отсутствует в БД. 2. Признак Sync у роли равен false. 3. Набор вложенных ролей в БД и в файлах отличается.
Создание#
Если пользователь выбрал действие создания, начинается процесс создания ролей. В этом случае происходит следующее:
- Проверка вложенных ролей: Система проверяет наличие всех вложенных ролей для каждой создаваемой роли.
- Создание записи: Для каждой роли, которая должна быть создана, система создает новую запись в базе данных.
- Вкладывание вложенных ролей: В процессе создания вложенные роли вкладываются в создаваемую.
- Обновление признака Sync: У созданных ролей признак проставляется
Syncсо значенеим true, что указывает на то, что роль была успешно создана и синхронизирована.
Обновление#
Если пользователь выбрал действие обновления для существующих ролей, начинается процедура обновления. В этом случае происходит следующее:
- Проверка вложенных ролей: Система проверяет наличие всех вложенных ролей для каждой обновляемой роли.
- Поиск существующих записей: Система ищет существующие записи для каждой выбранной роли.
- Обновление информации: Если запись найдена, происходит обновление информации о роли, включая описание и вложенные роли.
- Обновление признака Sync: В процессе обновления также обновляется признак
Sync, который устанавливается в значениеtrue, указывая на то, что роль была успешно обновлена.
Таким образом, проверка наличия всех вложенных ролей является критически важной для обеих операций, обеспечивая целостность данных и предотвращая ошибки в процессе создания и обновления ролей.
Обработка ошибок#
Если в процессе миграции возникают ошибки (например, отсутствуют вложенные роли), информация об этом отображается в столбце Сообщение. Это позволяет быстро идентифицировать и исправить проблемы.
Примечания#
- Если Мигратор ролей не нужен на проекте, файл
roles.jsможно оставить пустым, чтобы избежать ошибок при запуске проекта. - Если роль фигурирует в нескольких библиотеках, вложенные роли являются пересечением всех вложенных ролей, где эта роль описана.
- Роли обновляются без учета регистра. Например, если в БД уже есть роль в верхнем регистре, а в библиотеке эта же роль фигурирует в нижнем, будет найдена уже созданная роль и обновлена.