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

Порядок реализации

  1. 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)
  2. Auth Service — зависит от User Service
    • JWT payload, UserScopeCache, response classes
  3. Store / Catalog / Warehouse / Order — параллельно друг другу, после Auth
    • Обновить DTO auth-validate, переписать service-level авторизацию
  4. 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 (в одной сессии):

  1. Pull во все репо (включая erp-infrastructure если потребуется — спросить пользователя!)
  2. docker compose build --no-cache для всех 7 сервисов
  3. Остановить все 6 backend сервисов (docker compose stop user-service auth-service store-service catalog-service warehouse-service order-service)
  4. Запустить User Service один → применяется Liquibase миграция 018-021 (новая таблица, FK, DROP column)
  5. После успешного старта User Service → запустить остальные 5 + admin-bff
  6. 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 игнорируем эти поля, не ломаемся

Ссылки