1.4.3 Пользовательские роли с правами (Yuma-стиль)
Источники
| Слой | Документ |
|---|---|
| Требование | BR 1.4.3 |
| Бизнес-спека | Роли (новая) |
| Бизнес-спека | Сотрудники (обновлена) |
| Бизнес-спека | Зарплата (обновлена) |
| Бизнес-спека | Ролевая модель (обновлена — два слоя) |
| Бэкенд | User Service Data Model (4 новые таблицы + salary_formulas изменения) |
| Бэкенд | User Service API (7 новых эндпоинтов /roles/, изменения /employees/, internal) |
| Бэкенд | Auth Service API (JWT payload, /auth/me, /internal/auth/validate) |
| Бэкенд | Auth Service Data Model (Redis-кэш user_permissions) |
| Фронтенд | Роли — Список (новый) |
| Фронтенд | Роли — Карточка (новый) |
| Фронтенд | Сотрудники — Карточка (обновлён) |
| Фронтенд | Сотрудники — Список (обновлён) |
Прогресс
- User Service — миграции, Roles CRUD, employees update, internal permissions
- Auth Service — JWT payload, /auth/me, /internal/auth/validate, Redis-кэш
- Admin Franchise — BFF proxy + Web (новые страницы + обновления)
- Миграция данных на тестовый VPS (см. ниже)
Порядок реализации
- User Service — ядро, нет зависимостей
- Фаза 1: миграции (SQL)
- Фаза 2: Entity/Repo/DTO + permission catalog (константа)
- Фаза 3: Roles CRUD service + controller
- Фаза 4: Employees service update (принимать
roles[]) + internal permissions - Фаза 5: Seed системной роли «Администратор»
- Auth Service — зависит от User Service
- JWT payload, /auth/me, /internal/auth/validate расширение, Redis-кэш
- Admin Franchise — зависит от обоих бэкендов (можно начать параллельно с Auth Service)
- BFF proxy routes
- Web: PermissionContext, страницы Roles, обновления Employees
Разовая миграция данных (после деплоя миграций, до запуска первой сессии)
Тестовая среда, реальных данных нет
Подробнее — BR 1.4.3 §9.
- Создать системную роль «Администратор» в
rolesсо всеми permission-ключами из каталога вrole_permissions(is_system=true) - Привязать
admin@erp.local(enumadmin_franchise) к этой роли черезemployee_roles - Занулить
legal_entities.owner_user_idдля всех владельцев партнёров (перед удалением):UPDATE legal_entities SET owner_user_id = NULL WHERE owner_user_id IN (SELECT id FROM employees WHERE role = 'admin_franchisee'); - Удалить всех сотрудников, кроме
admin_franchise: (Каскадно снесутсяDELETE FROM employees WHERE role IN ('admin_franchisee', 'manager', 'cashier');employee_stores,employee_legal_details,shift_*,employee_rolesи т.п.)
Deferred (подтверждено для отдельных BR)
- Per-ТТ формулы зарплаты (role × store → formula)
- Min/Max лимиты на POS-операциях
- Миграция Store/Catalog/Warehouse/Order сервисов с
switch(role)на permission-checks - Судьба enum-слоя
admin_franchise/admin_franchiseeв новой модели