BR 3.1 — User Service
Небольшая задача: расширить permission-каталог 6 новыми ключами и выдать их системной роли «Администратор» во всех существующих франшизах.
Контракты
Задачи
1. Расширить PermissionCatalog.java
- В
BACKOFFICE_SECTIONSдобавить:new BackofficeSection("customers", "Клиенты", true)— с read+editnew BackofficeSection("customer_groups", "Группы клиентов", true)— с read+edit
- В
POS_OPERATIONSдобавить:new PermissionItem("customers.create_quick", "Быстрое создание клиента")
- Добавить особый permission
customers.deleteотдельно отcustomers.edit(не вписывается в стандартный паттерн read/edit):- Либо: добавить поле
BackofficeSection.hasDeleteи обрабатывать вbuildAllKeys() - Либо: вручную в отдельной константе
EXTRA_KEYS = Set.of("customers.delete")и включить вALL_KEYS
- Либо: добавить поле
- [~] Обновить unit-тесты
PermissionCatalogTest— проверить что новые ключи попали вall()и вbackofficeCatalog()— пропущено, тестов в репе нет
2. Разовая миграция данных
- Liquibase changeset
024-br-3-1-extend-admin-permissions.xml:- Найти все
rolesгдеis_system = true AND name = 'Администратор' AND deleted_at IS NULL - Для каждой — вставить в
role_permissionsнедостающие ключи:customers.read,customers.edit,customers.delete,customers.create_quickcustomer_groups.read,customer_groups.edit
ON CONFLICT DO NOTHINGчтобы идемпотентно- SQL примерно:
INSERT INTO role_permissions (role_id, permission_key, granted) SELECT r.id, unnest(ARRAY[ 'customers.read', 'customers.edit', 'customers.delete', 'customers.create_quick', 'customer_groups.read', 'customer_groups.edit' ]), true FROM roles r WHERE r.is_system = true AND r.name = 'Администратор' AND r.deleted_at IS NULL ON CONFLICT (role_id, permission_key) DO NOTHING;
- Найти все
3. Валидация permission-ключей
- При сохранении роли (POST/PATCH /roles) проверка
isValidKey()— должна пропускать новые ключи. Убедиться что тест проходит.
4. Тесты
-
PermissionCatalogTest— новые ключи вall(), в каталоге, в POS-operations - Integration:
GET /roles/permission-catalogвозвращает новые разделы / ключи - Integration: создание роли с новыми ключами (
customers.edit+customers.read) — работает
Definition of Done
GET /roles/permission-catalogвозвращает новые разделы «Клиенты» и «Группы клиентов», иcustomers.create_quickв POS- Миграция применяется на тестовом VPS — все «Администраторы» получают 6 новых permissions автоматически
- Можно создать обычную роль с
customers.readчерез API — без ошибки валидации