Skip to content

fix(manager): ограничить payload /deliveries-active whitelist'ом#427

Open
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-416-deliveries-active-payload
Open

fix(manager): ограничить payload /deliveries-active whitelist'ом#427
Ibochkarev wants to merge 1 commit into
betafrom
fix/issue-416-deliveries-active-payload

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

GET /api/mgr/deliveries-active отдавал полный $item->toArray() модели msDelivery. В ответ попадали properties, class, validation_rules и прочие внутренние поля интеграций доставки. Маршрут доступен любому аутентифицированному менеджеру (только Auth, без mssetting_save).

Изменения:

  • Обработчик перенесён в DeliveriesController::getActiveDropdown().
  • Ответ строится по whitelist ACTIVE_DROPDOWN_FIELDS: id, name, price, active, position.
  • Сохранён перевод имён ms3_* через lexicon; добавлена сортировка по position.
  • active остаётся integer 0|1, как в прежнем toArray().

Контракт: с /deliveries-active больше не приходят properties / class / validation_rules / description / logo и т.п. Полный CRUD по-прежнему на /api/mgr/deliveries под mssetting_save.

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

  • Исправление бага (non-breaking change)
  • Другое: урезание payload dropdown (намеренный security-fix shape)

Связанные Issues

Closes #416

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

  • Автоматические тесты
  • Live smoke на локальном MODX (project.test)

Команды и результат:

php -l .../DeliveriesController.php                         # exit 0
php -l .../config/routes/manager.php                         # exit 0
php tests/DeliveriesActiveDropdownFieldsTest.php             # OK (exit 0)
php tests/DirectFilterKeysTest.php                           # OK (exit 0)

Red-green: добавление properties в whitelist валит тест; после отката — OK.

Live: getActiveDropdown() → 9 доставок, ключи только id,name,price,active,position, без secrets.

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

  • MiniShop3: beta / Manager REST
  • MODX: 3.x
  • PHP: 8.2+

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают Vue OrderView (endpoint там не используется; combo идёт через model-fields)
  • Лексиконы (не требуются)
  • Затронутые PHP-файлы проходят php -l

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

Out of scope (как в issue):

  • /statuses-dropdown по-прежнему отдаёт toArray(); у статусов нет properties/class как у доставок — отдельная задача при необходимости.
  • Auth-only на маршруте без PermissionMiddleware сохранён (dropdown для форм заказа).

GET /api/mgr/deliveries-active previously returned full msDelivery::toArray(),
leaking integration properties/class/validation_rules to any authenticated
manager. Serve only id/name/price/active/position via DeliveriesController.
@Ibochkarev Ibochkarev added priority: high Важно исправить в ближайшее время bug Something isn't working labels Jul 17, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 July 17, 2026 09:22
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: /deliveries-active отдаёт полный toArray() включая properties

1 participant