Skip to content

fix(catalog): сброс кэша при изменении ACL групп ресурсов - #735

Merged
biz87 merged 1 commit into
betafrom
fix/issue-717-acl-cache-invalidate
Sep 16, 2026
Merged

biz87 merged 1 commit into
betafrom
fix/issue-717-acl-cache-invalidate

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

После #666/#681 каталог скрывает товары из закрытых групп ресурсов, но смена ACL не сбрасывала кэш страниц и фасетов. Закрытый товар мог оставаться виден анониму на закэшированном ms3_products и в Web API facets.

Решение (вариант A): при мутациях ACL/членства групп ресурсов MiniShop3 один раз за запрос сбрасывает resource/page cache storefront-контекстов и партицию ms3/facets. Решение зафиксировано в desc настройки ms3_web_catalog_respect_resource_groups (ru/en).

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

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

Связанные Issues

Closes #717

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

cd core/components/minishop3
php -l src/Services/Catalog/CatalogAclCacheInvalidator.php
php -l src/Services/Catalog/CatalogAclProcessorActionMatcher.php
php -l src/Services/Product/ProductFacetService.php
php -l elements/plugins/minishop3.php
./vendor/bin/phpunit --filter 'CatalogAcl|CatalogResourceGroupVisibilitySql'
# → EXIT 0, OK (36 tests, 64 assertions)
  • Ручное тестирование (сценарий ниже для ревьюера)
  • Автоматические тесты (composer ci:php / composer test, npm run lint:ci, composer stan / GitHub Actions CI)
  • Тестирование на разных версиях PHP/MODX

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

  • MiniShop3: ветка fix/issue-717-acl-cache-invalidate
  • MODX: 3.x (проверка action strings по .phpstan-deps)
  • PHP: 8.2+

Ручной сценарий: включить ms3_web_catalog_respect_resource_groups и access_resource_group_enabled. Закэшировать витрину с ms3_products (без !). Закрыть товар через ACL группы ресурсов. Обновить страницу анонимом без Clear Cache. Товар не должен остаться в HTML. То же для GET /api/v1/product/filters (фасеты).

После установки/обновления пакета переподписать события плагина (новые: OnResourceGroup*, membership, OnUserGroupRemove).

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

До После
n/a n/a

Чеклист

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

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

  • Хук на mgr connector через OnMODXInit (не OnHandleRequest: modConnectorRequest его не вызывает).
  • Whitelist процессоров + события RG/membership/OnUserGroupRemove.
  • Остаточные пробелы (в desc настройки): ACL вне процессоров MODX, внешний CDN.
  • Vue не трогали. CHANGELOG не меняли (release-time).

…changes

Manager ACL/membership mutations left cached ms3_products HTML and Web API
facets serving closed products. Flush resource + ms3/facets once per request
via plugin hooks and a dedicated invalidator when catalog RG filtering is on.
@Ibochkarev Ibochkarev added priority: medium Средний приоритет bug Something isn't working labels Sep 15, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 September 15, 2026 17:45
@biz87
biz87 merged commit c03bbd2 into beta Sep 16, 2026
6 checks passed
@Ibochkarev
Ibochkarev deleted the fix/issue-717-acl-cache-invalidate branch September 16, 2026 11:32
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: medium Средний приоритет

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Кэш не сбрасывается при изменении ACL групп ресурсов: закрытый товар остаётся виден

2 participants