food-market/src
nns bd2800837f feat(roles): системные роли read-only + русские имена + чистка дубликата у admin
Концепция: «Супер администратор» — платформенная Identity-роль
SuperAdmin. «Администратор» — организационная роль внутри Employee
(IsSystem=true в EmployeeRole). Они НЕ должны дублироваться у
одного юзера.

- Сидер: admin@food-market.local получает только Identity-роль
  SuperAdmin. Догоняющая ветка для существующих стендов:
  если есть Identity-роль Admin — RemoveFromRoleAsync. На стенде
  AspNetUserRoles почищен SQL'ом.
- AppLayout: translateRoles() переводит SuperAdmin → «Супер
  администратор», скрывает Identity-роль Admin (org-уровень
  показывается через Employee/Role, не через Identity).
- EmployeeRolesPage: клик по строке системной роли → alert
  «Системная роль, изменения недоступны». Edit-модалка для
  системных была частично defensive (disabled чекбоксы Phase 2c),
  теперь точка входа закрыта целиком. Кастомные роли — без изменений.

EmployeeRole.IsSystem поле уже было — миграция не нужна.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 16:11:14 +05:00
..
food-market.api feat(roles): системные роли read-only + русские имена + чистка дубликата у admin 2026-04-26 16:11:14 +05:00
food-market.application fix(tenancy): SuperAdmin override должен применять tenant filter выбранной орги 2026-04-26 15:55:04 +05:00
food-market.domain feat(domain): Organization.IsArchived/AccountOwner + SuperAdminAuditLog + migration 2026-04-26 12:51:25 +05:00
food-market.infrastructure fix(tenancy): SuperAdmin override должен применять tenant filter выбранной орги 2026-04-26 15:55:04 +05:00
food-market.pos Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
food-market.pos.core Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
food-market.shared Phase 0: project scaffolding and end-to-end auth 2026-04-21 13:59:13 +05:00
food-market.web feat(roles): системные роли read-only + русские имена + чистка дубликата у admin 2026-04-26 16:11:14 +05:00