food-market/src
nns f824e38959 feat(roles): фильтр sidebar и route-guard по ролям пользователя
Раньше Sidebar строился только по флагу isSuperAdmin, и Кассир/
Кладовщик видели весь меню (включая «Сотрудники», «Контрагенты»,
«Настройки»), хотя серверные [Authorize(Roles = "Admin")] возвращали
бы 403 на каждом запросе.

Теперь:
- AppLayout.buildNav берёт roles[] из /api/me и собирает меню per-role:
  · Каталог: Кассиру/Кладовщику только Товары; Admin — всё.
  · Контрагенты: только Admin.
  · Остатки: видят все три tenant-роли. Движения — Admin/Storekeeper.
  · Закупки: Admin/Storekeeper.
  · Продажи: Admin/Cashier.
  · Импорт МойСклад, Настройки организации, Сотрудники, Роли,
    Склады, Кассы — только Admin.
  · Системная консоль — только SuperAdmin.

- Новый компонент RoleGuard (web/components/RoleGuard.tsx). Показывает
  «Нет доступа» вместо страницы если у юзера нет нужной роли. Применён
  в App.tsx для всех admin-only роутов: /settings/*, /catalog/{stores,
  retail-points,counterparties}, /admin/import/moysklad. Защищает на
  случай прямого ввода URL — sidebar их уже не показывает, но без
  guard юзер увидел бы крутящееся колесо и 403.

Серверная авторизация ([Authorize(Roles=...)]) — основной слой защиты;
sidebar+RoleGuard — UX-слой.
2026-05-06 11:32:07 +05:00
..
food-market.api feat(employees): двухступенчатое удаление — «уволить» → «удалить» 2026-05-06 11:32:07 +05:00
food-market.application feat(directories): двухуровневые справочники Группы и Ед.измерения (системные + tenant) 2026-04-26 16:20:47 +05:00
food-market.domain feat(employees): двухступенчатое удаление — «уволить» → «удалить» 2026-05-06 11:32:07 +05:00
food-market.infrastructure feat(employees): двухступенчатое удаление — «уволить» → «удалить» 2026-05-06 11:32:07 +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.public fix(phone): сохранять позицию курсора после нормализации 2026-05-03 18:25:56 +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): фильтр sidebar и route-guard по ролям пользователя 2026-05-06 11:32:07 +05:00