1.4.4 Единая permission-based ролевая модель (удаление enum)
Источники
| Слой | Документ |
|---|---|
| Требование | BR 1.4.4 |
| Бизнес-спека | Ролевая модель (переработана) |
| Бизнес-спека | Роли (обновлена — скрытые роли владельцев) |
| Бизнес-спека | Сотрудники (переработана — без enum) |
| Бизнес-спека | Юридические лица (вкладка Права) |
| Бизнес-спека | Франшизы (новая — type corporate/individual) |
| Бэкенд | User Service Data Model (таблица franchises, roles.owner_legal_entity_id, DROP employees.role) |
| Бэкенд | User Service API (4 новых endpoint, убран role) |
| Бэкенд | Auth Service API (JWT упрощён, scope в responses) |
| Бэкенд | Auth Service Data Model (Redis user_scope) |
| Фронтенд | Сотрудники — Карточка |
| Фронтенд | Сотрудники — Список |
| Фронтенд | Роли — Карточка |
| Фронтенд | Роли — Список |
| Фронтенд | Юр. лица — Карточка (новая вкладка «Права») |
Прогресс
- User Service — миграции (4 changeset), ScopeService, owner-permissions API, убрать enum
- Auth Service — JWT без enum, UserScopeCache, login/me/validate с scope+franchise.type
- Store Catalog Warehouse Order — перевод switch(role) на scope+permissions (4 сервиса одновременно)
- Admin Franchise — BFF proxy, Web формы без enum, вкладка «Права» в ЮЛ, gating по type
- Разовая миграция данных на тестовый VPS
Порядок реализации
- User Service — ядро
- Фаза 1: 4 Liquibase changeset (franchises, FK, owner_legal_entity_id, DROP role)
- Фаза 2: Entity/Repo/DTO
- Фаза 3: ScopeService + переписывание role-checks
- Фаза 4: новые controllers (Franchise, OwnerPermissions, Scope internal)
- Фаза 5: обновление existing controllers (employees, internal)
- Auth Service — зависит от User Service
- JWT payload, UserScopeCache, response classes
- Store / Catalog / Warehouse / Order — параллельно друг другу, после Auth
- Обновить DTO auth-validate, переписать service-level авторизацию
- Admin Franchise — зависит от User + Auth
- BFF proxy routes (+2), Web (Permission context, gating, формы, вкладка Права)
Разовая миграция данных на тестовый VPS
Синхронный деплой всех сервисов
После
DROP COLUMN employees.roleлюбой сервис, ожидающий enum — упадёт. Все 6 сервисов (User, Auth, Store, Catalog, Warehouse, Order) + Admin BFF деплоятся синхронно.
Порядок на VPS (в одной сессии):
- Pull во все репо (включая
erp-infrastructureесли потребуется — спросить пользователя!) docker compose build --no-cacheдля всех 7 сервисов- Остановить все 6 backend сервисов (
docker compose stop user-service auth-service store-service catalog-service warehouse-service order-service) - Запустить User Service один → применяется Liquibase миграция 018-021 (новая таблица, FK, DROP column)
- После успешного старта User Service → запустить остальные 5 + admin-bff
- Health check всех
При любой проблеме — rollback через откат коммитов + redeploy.
Deferred (BR 1.4.4, закрепить в decomposition файлах)
- Смена
franchise.typeпосле старта — через SQL, UI/API не делаем - Шаблоны скрытых ролей владельцев партнёров — отдельная BR
- Opt-in инвалидация scope-кэша (
DELETE /internal/auth/cache/{user_id}) — отдельно - Jwt backward-compat — старые JWT с
role/store_ids/legal_entity_idигнорируем эти поля, не ломаемся
Ссылки
- Workflow разработки
- Репозитории
- BR 1.4.3 decomposition — предыдущий шаг