RBAC Matrix — Сквозная проверка доступа
Используется всеми тестерами как regression suite . Прогоняется в каждый цикл. Зоной ответственности владеет T1.
Контекст багов: в базе есть массовые 403 (Manager на ТТ/ЮЛ, Franchise-only на создание ТТ, 403 на Склад/Заказы/Стоп-листы), что не соответствует BR 1.4.4. Это класс багов , не отдельные кейсы. Эта матрица — основной инструмент его выявления и регрессии после фиксов.
Источник правды
D:\Project\ERP\content-mirror\05-Business\Roles.md — три сценария scope сотрудника
D:\Project\ERP\content-mirror\08-Specs\Админка-Франшизы\Роли.md — permission catalog
BR 1.4.4 §3, §7
4 роли + критерии scope
Роль Scope Создаётся Franchise owner Вся франшиза (ЮЛ, ТТ, сотрудники, каталог) При bootstrap Franchisee owner (партнёр)Свои ЮЛ + их ТТ + сотрудники этих ТТ Транзакционно с созданием ЮЛ type=franchisee Manager Только назначенные ТТ через employee_role_stores Через форму “Сотрудники” Cashier Один POS-контекст после PIN-логина Через форму “Сотрудники”
Матрица по разделам бэк-офиса
Заполнить колонки Текущее при тестировании. Если расходится с Ожидание — баг.
Легенда:
Edit — полный CRUD в рамках scope
Read — просмотр в рамках scope
No — раздел не виден / 403
N/A — роль не работает в бэк-офисе (Cashier работает только на POS)
1. Дашборд / Главная
Раздел Franchise — ожид. Franchise — факт Franchisee — ожид. Franchisee — факт Manager — ожид. Manager — факт Cashier — ожид. Cashier — факт Открыть /dashboard Read Read Read N/A
2. Франшизы
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Просмотр своей франшизы Read No No N/A Редактирование (type switch) Edit (вручную SQL) No No N/A
Известный баг: редактирование своей франшизы → 404 после Save . Внести в проверку Franchise.
3. Юридические лица
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Меню видно (type=corporate) Да Да (свои) Только если legal_entities.read N/A Меню скрыто (type=individual) Скрыто Скрыто Скрыто N/A Список ЮЛ Все Только свои По legal_entities.read N/A Создать type=franchisee Да (только если corporate) No No N/A Создать type=franchise No (только bootstrap) No No N/A Редактировать (все поля) Любое Только свои По legal_entities.edit + scope N/A Удалить ЮЛ Да (если нет ТТ) No No N/A Suspend / Resume Да No No N/A Импорт xlsx Да (если corporate) No No N/A Вкладка «Права» владельца партнёра Да (своих партнёров) No (своя же — не видит) No N/A
4. Сотрудники
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Просмотр списка Все сотрудники франшизы Только своих (по своим ТТ/ЮЛ) По employees.read (свои ТТ) N/A Создание (manager/cashier) В любой ТТ В своих ТТ По employees.edit (обычно нет) N/A Редактирование Любого Только своих По employees.edit N/A Деактивация Любого Только своих По employees.edit N/A Назначение ролей Любых обычных Только обычных в своих ТТ No N/A
Известные баги: поиск ФИО не работает , создание сотрудника 500 , редактирование роли с админа не работает .
5. Роли
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Список ролей (без скрытых) Все Назначенные своим По roles.read N/A CRUD пользовательских ролей Да No По roles.edit N/A Системная «Администратор» — protected Только rename No No N/A Hidden роли владельцев партнёров Не видны в списке Не видны Не видны N/A
6. Торговые точки
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Список ТТ Все Свои (по своим ЮЛ) Свои назначенные N/A Создать ТТ Да Да (в своих ЮЛ) No N/A Редактировать ТТ Любая Свои Только статус/график своей N/A Удалить ТТ (если unpublished) Да No No N/A Publish / Unpublish Да Свои Свою N/A POS-терминалы CRUD Да Свои Своя N/A Столы CRUD Да Свои Своя N/A
Жирный : известный баг — Franchisee не может создать ТТ («Only franchise role can perform this action»). По спеке должен мочь в своих ЮЛ.
7. Каталог — Товары
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Список товаров Все Активные товары Активные товары 403 в админке Детали Любой Активные Активные 403 CRUD товаров Да No No 403 Удаление / восстановление Да No No 403
8. Каталог — Категории / Модификаторы / Прейскуранты
Раздел Franchise Franchisee Manager Cashier Категории GET Да Да Да 403 Категории CRUD Да No No No Модификаторы CRUD Read (активные) Read (активные) 403 Привязка модификаторов к товарам Да No No No Прейскуранты CRUD Да No (по pricelist.edit) No 403
9. Каталог — Стоп-листы
Действие Franchise Franchisee Manager Cashier Просмотр Все ТТ Свои ТТ Своя ТТ Read-only Поставить / снять стоп Любая ТТ Свои ТТ Своя ТТ 403
Известный баг: Стоп-листы — 403 у Manager (по спеке должна быть Своя ТТ).
10. Склад
Раздел Franchise — ожид. факт Franchisee — ожид. факт Manager — ожид. факт Cashier — ожид. факт Ингредиенты CRUD Да No По warehouse.edit 403 Техкарты CRUD Да No По warehouse.edit 403 Приёмки Да Свои ТТ Своя ТТ 403 Списания Да Свои ТТ Своя ТТ 403 Остатки Да Свои ТТ Своя ТТ 403
Известный баг: все вкладки Склад → 403 для Manager.
11. Заказы
Раздел Franchise Franchisee Manager Cashier (POS) GET список Все ТТ Свои ТТ Своя ТТ Своя ТТ GET детали Все Свои Своя Своя POST (создать) — — — Да (POS) POST items — — — Да DELETE items — — — Да POST pay — — — Да POST complete — — Да Да POST cancel Да Свои Своя Свой PATCH order — — Да Да
Известный баг: все вкладки Заказы → 403 для Manager.
12. Расписание / Смены / Зарплата
Раздел Franchise Franchisee Manager Cashier Шаблоны смен Да Свои ТТ Своя ТТ (read?) N/A Расписание Да Свои Своя N/A Time tracking Да Свои Своя Свои часы Формулы зарплаты Да Свои По payroll.read N/A Ведомости Да Свои По payroll.read N/A Активность сотрудников Да Свои Своя ТТ N/A
13. Aggregator integrations / PayKeeper / Marking
Раздел Franchise Franchisee Manager Cashier Aggregator bindings на ТТ Да Свои ТТ Своя ТТ (?) N/A PayKeeper подключение к ЮЛ По integrations.manage Своих ЮЛ No N/A
Чек-лист для тестера T1
После прогона матрицы заполнить отчёт:
RBAC Pass — RUN-{date}-{N}
- Прогнано ролей: 4 / 4
- Разделов: 13 / 13
- Расхождений с ожиданием: {N}
- Заведено новых багов: BUG-NNN, BUG-NNN
- Подтверждено известных RBAC-багов: BUG-NNN, ...
Методика прогона
Подготовить 4 учётки (получить у тест-лида или создать через bootstrap):
franchise@test.local — Franchise owner главной франшизы (type=corporate)
franchisee@test.local — Franchisee owner с ≥1 ЮЛ и ≥2 ТТ
manager@test.local — Manager на 1 конкретной ТТ
cashier@test.local — Cashier с PIN на той же ТТ
Подготовить отдельную тестовую франшизу с type=individual для проверки скрытия ЮЛ
Прогон : открывать каждый раздел под каждой ролью, фиксировать в матрице факт
Для каждого расхождения завести BUG-NNN с привязкой к ячейке матрицы и spec-источнику