Skip to content

fix(manager-api): require msorder_save for order write routes#402

Open
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-377-orders-msorder-save
Open

fix(manager-api): require msorder_save for order write routes#402
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-377-orders-msorder-save

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Группа /api/mgr/orders/* целиком висела на msorder_list, поэтому роль только со списком могла менять и удалять заказы через Manager API.

Разделил маршруты на две группы:

  • GET (list, filters, get, products, logs) → msorder_list
  • POST/PUT/DELETE (create, update, delete, finalize, recalculate, products) → msorder_save

PermissionMiddleware по-прежнему отдаёт 403 до контроллера. Родительский AuthMiddleware(mgr) не менялся.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #377

Как это было протестировано?

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint)
  • Тестирование на разных версиях PHP/MODX

Gate E (exit codes):

  • php -l core/components/minishop3/config/routes/manager.php → 0
  • php -l core/components/minishop3/tests/OrdersRoutePermissionsTest.php → 0
  • php core/components/minishop3/tests/OrdersRoutePermissionsTest.php → 0 (OK)
  • red-green: на origin/beta тот же тест падает (POST …msorder_list); после фикса → 0
  • php core/components/minishop3/tests/DirectFilterKeysTest.php → 0

Конфигурация тестирования:

  • MiniShop3: ветка fix/issue-377-orders-msorder-save
  • MODX: n/a (standalone router load + stub modX)
  • PHP: 8.x локально

Скриншоты (если применимо)

До После

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en)
  • PHPStan проходит без новых ошибок
  • ESLint проходит без ошибок (для JS/Vue изменений)
  • Обновлён CHANGELOG.md (для значимых изменений)

Дополнительные заметки

  • DELETE остаётся под msorder_save (как в AC issue). Отдельный msorder_remove — follow-up.
  • UI менеджера по-прежнему может показывать кнопки записи list-only роли; отказ придёт 403 с API.
  • Ревью: security / code-review / thermo-nuclear — блокеров нет. Тест переписан на загрузку Router + инспекцию middleware вместо парсинга исходника.

Split /api/mgr/orders into read (msorder_list) and write (msorder_save)
groups so list-only manager roles cannot mutate orders via the API.
@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время bug Something isn't working labels Jul 16, 2026
Extend the #377 regression test to dispatch sample routes with a stub
modX so list-only write and save-only read return 403 before handlers.
@Ibochkarev

Copy link
Copy Markdown
Member Author

Follow-up по silent-failure review

Закрыто в PR:

  • M1 / L1 — тест больше не парсит исходник regex’ом: грузит Router + stub modX, проверяет middleware на маршрутах и runtime 403 через dispatch (list-only write / save-only read).

Оставлено follow-up (вне #377):

  • M2 — UI-gating кнопок по MODx.perm.msorder_save
  • M3 — DELETE на msorder_remove вместо msorder_save
  • L2–L5 — локализация 403, соседние dropdown/grid-config, custom route overrides

@Ibochkarev
Ibochkarev requested a review from biz87 July 16, 2026 04:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working priority: high Важно исправить в ближайшее время

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Manager API: write-операции заказов под permission msorder_list

1 participant