Skip to content

Выравнивание ACL каталога на Fenom и hardening токенов - #757

Open
Ibochkarev wants to merge 3 commits into
betafrom
fix/issue-755-catalog-acl-tokens
Open

Ibochkarev wants to merge 3 commits into
betafrom
fix/issue-755-catalog-acl-tokens

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

После v1.13.0-beta1 сниппеты витрины оставались на анонимном RG-гейте, а Web API уже поднимал member-каталог. token/get отдавал отозванный токен из сессии, ResetPassword менял пароль inactive-клиенту, catalog API принимал ms3_token из query, а &sortby= на сниппете мог уходить в ORDER BY без whitelist.

Этот PR выравнивает Fenom с Web API через buildWhereFragmentForRequest / isVisibleForRequest, валидирует session-токен против БД, вешает TokenMiddleware на token/get, закрывает query-token elevation, проверяет isPasswordResetDenied на reset, дропает небезопасные части sortby до inject menuindex/options, инвалидирует facet/page ACL cache при смене групп. Для member-запросов страница получает cacheable=0, чтобы HTML не попал в общий ключ кэша ресурса.

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

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

Связанные Issues

Closes #755

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

cd core/components/minishop3
php -l src/Services/Catalog/CatalogResourceGroupVisibility.php
php -l src/Services/Catalog/CatalogSortbyQualifier.php
php -l src/Services/TokenService.php
php tests/CatalogResourceGroupVisibilityTest.php
php tests/CatalogSortbyQualifierTest.php
php tests/TokenMiddlewareQueryTokenTest.php
php tests/CustomerSessionContractTest.php
php tests/CustomerAuthRoutesTest.php
php tests/ResetPasswordAccessTest.php
./vendor/bin/phpunit \
  tests/Unit/Services/TokenServiceGenerateCustomerTokenTest.php \
  tests/Unit/Controllers/Api/Manager/CustomersControllerUpdateTest.php \
  tests/Unit/Controllers/Api/Manager/CustomerGroupsControllerAclCacheTest.php
# exit 0 — smoke OK; PHPUnit OK (12 tests, 44 assertions)
  • Ручное тестирование
  • Автоматические тесты (composer ci:php / composer test, npm run lint:ci, composer stan / GitHub Actions CI)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: ветка fix/issue-755-catalog-acl-tokens (beta)
  • MODX: 3.x (unit/smoke без полной установки)
  • PHP: 8.2+

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

Не применимо (API / сниппеты / сервисы).

Чеклист

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

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

Member-aware resource-group visibility for storefront snippets matches Web API,
revoked session tokens are not reused, query-string ms3_token no longer elevates
ACL, reset denies inactive accounts, and unsafe snippet sortby parts are dropped.
@Ibochkarev Ibochkarev added bug Something isn't working php Pull requests that update php code priority: high Важно исправить в ближайшее время labels Sep 21, 2026
Replace ?? on $modx->resource with isset so nullCoalesce.initializedProperty
does not fire on the typed modx property.
PHPStan flags isset()/?? on CatalogResourceGroupVisibility::$modx. Read
resource into a local and guard with is_object instead.
@Ibochkarev
Ibochkarev requested a review from biz87 September 21, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] ACL каталога и токены после 1.13.0: сниппеты, token/get, reset

1 participant