Skip to content

fix(mgr): scope category product publish/bulk by parent#443

Open
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-418-category-products-idor
Open

fix(mgr): scope category product publish/bulk by parent#443
Ibochkarev wants to merge 2 commits into
betafrom
fix/issue-418-category-products-idor

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Закрывает IDOR в Manager API «Товары категории»: publish, multiple и bulkDelete загружали товар только по id, без проверки parent = categoryId из URL. Теперь все мутации (включая уже корректный sort) идут через CategoryProductScopeService::findInCategory().

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

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

Связанные Issues

Closes #418

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

Локальный CI-гейт (без MODX/MySQL):

cd core/components/minishop3
composer ci:php   # exit 0
php tests/CategoryProductScopeServiceTest.php   # exit 0
php tests/CategoryProductsControllerScopeTest.php   # exit 0
  • Автоматические тесты (composer ci:php)
  • Ручное тестирование
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: beta
  • MODX: n/a (smoke без инсталла)
  • PHP: 8.2+

Чеклист

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

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

  • Контракт совпадает с sort(): только прямые дочерние товары (parent = categoryId). В nested-режиме списка (nested=1) мутации по URL родительской категории для товаров из подкатегорий по-прежнему не проходят — это согласовано с drag-sort (canDrag отключён). Расширение scope под nested — отдельная задача, если понадобится.
  • Review: code-reviewer, thermo-nuclear-code-quality-review, security-review — BLOCK не найдено.

Prevent IDOR where publish/multiple/bulkDelete could mutate products
outside the category from the URL by requiring parent = categoryId,
matching the existing sort() contract.
@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время bug Something isn't working labels Jul 24, 2026
- CategoryTreeService + nested param for publish/multiple/sort scope
- Vue grid passes nested flag to mutation requests
- Category routes: array_merge($data, $params) so URL id wins
- Smoke tests for tree, nested scope, sort happy path
@Ibochkarev
Ibochkarev requested a review from biz87 July 24, 2026 03:02
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] CategoryProducts: publish/multiple/bulkDelete без проверки parent (IDOR)

1 participant