Admin Franchise — UI-гейтинг по permissions
Контракты и спеки
- Фронт-спека UI-гейтинга — полная таблица sidebar, кнопок, состояний
- Роли § UI-гейтинг — бизнес-правила
- BR 1.5 — входящее требование
Инфраструктура (уже есть из BR 1.4.3)
usePermission(key)hook<RequirePermission keys={[...]}>компонентPermissionContextс массивомpermissions[]
Задача — применить инфраструктуру ко всем разделам и страницам.
Чеклист задач
Каркас
-
Layout.tsx— sidebar gating: каждый пункт обернуть вusePermission. Группы (Каталог, Склад, Сотрудники, Заказы) — показывать если хотя бы один подпункт виден. Дашборд всегда видно. Franchise owner bypass -
App.tsx— обернуть маршруты в<PermissionRoute>компонент - Новый
components/PermissionRoute.tsx— проверяет permission черезusePermission, рендерит children или<NoAccessPage /> - Новый
pages/NoAccessPage.tsx— «У вас нет доступа к этому разделу» + иконка замка + кнопка «На главную» (→/) -
api/client.ts— 403 response interceptor → toast «У вас нет прав на это действие» -
LoginPage.tsxилиPermissionContext— POS-only блокировка: после/auth/meпроверить permissions, если нет ни одного backoffice*.read→ модалка «У вашей роли нет доступа к бэк-офису» + кнопка «Выйти»
Торговые точки
-
StoresListPage— кнопка «Добавить» черезusePermission("stores.edit") -
StoreViewPage— кнопки «Редактировать», «Удалить», «Опубликовать/Снять» черезusePermission("stores.edit") -
StoreCreatePage,StoreEditPage— route guardstores.edit
Каталог: товары
-
ProductsListPage— кнопка «Добавить товар» черезusePermission("menu.edit") -
ProductViewPage— кнопки «Редактировать», «Удалить» черезusePermission("menu.edit") -
ProductCreatePage,ProductEditPage— route guardmenu.edit
Каталог: категории
-
CategoriesPage— кнопка «Добавить», drag-n-drop черезusePermission("menu.edit")
Каталог: модификаторы
-
ModifiersListPage— кнопка «Добавить» черезusePermission("menu.edit") -
ModifierViewPage— кнопки «Редактировать», «Удалить» черезusePermission("menu.edit") -
ModifierCreatePage,ModifierEditPage— route guardmenu.edit
Каталог: прейскуранты
-
PriceListsPage— кнопка «Добавить» черезusePermission("price_list.edit") -
PriceListDetailPage— кнопка «Редактировать» черезusePermission("price_list.edit")
Каталог: ингредиенты
-
IngredientsListPage— кнопка «Добавить» черезusePermission("ingredients.edit") -
IngredientViewPage— кнопка «Редактировать» черезusePermission("ingredients.edit") -
IngredientCreatePage,IngredientEditPage— route guardingredients.edit
Каталог: стоп-листы
-
StopListPage— toggle on/off черезusePermission("stoplists.edit")
Склад
-
InventoryPage— read-only если нетwarehouse.edit -
ReceiptActListPage— кнопка «Добавить акт» черезusePermission("warehouse.edit") -
ReceiptActDetailPage— кнопки действий черезusePermission("warehouse.edit") -
WriteOffActListPage— кнопка «Добавить акт» черезusePermission("warehouse.edit") -
WriteOffActDetailPage— кнопки действий черезusePermission("warehouse.edit")
Сотрудники
-
EmployeesListPage— кнопка «Добавить», меню действий черезusePermission("employees.edit")(частично уже сделано) -
EmployeeViewPage— кнопки «Редактировать», «Деактивировать/Реактивировать» черезusePermission("employees.edit") -
EmployeeCreatePage,EmployeeEditPage— route guardemployees.edit
Роли
-
RolesListPage— кнопка «Добавить», «Удалить» черезusePermission("roles.edit") -
RoleViewPage— кнопки «Редактировать», «Удалить» черезusePermission("roles.edit") -
RoleCreatePage,RoleEditPage— route guardroles.edit
Расписание
-
SchedulePage— кнопка «Добавить смену» черезusePermission("schedule.edit")
Зарплата
-
PayrollFormulasPage— кнопки «Добавить», «Редактировать» черезusePermission("payroll.edit") -
PayrollPage— кнопки «Рассчитать», «Подтвердить», «Отметить выплаченной» черезusePermission("payroll.edit")
Заказы
-
ActiveOrdersPage— кнопки действий черезusePermission("orders.edit") -
OrderHistoryPage— read-only если нетorders.edit
Юридические лица
-
LegalEntitiesListPage— кнопка «Добавить» черезusePermission("legal_entities.edit") -
LegalEntityViewPage— кнопки «Редактировать», «Удалить» черезusePermission("legal_entities.edit") -
LegalEntityCreatePage,LegalEntityEditPage— route guardlegal_entities.edit