Respect resource groups in Fenom storefront snippets - #681
Conversation
Hide anonymous catalog (and cart add) resources that belong to groups with Resource Group Access ACL; toggle via ms3_web_catalog_respect_resource_groups. Closes #659
validateProduct uses newQuery only when RG ACL is enabled; SQLite cart stubs disable the setting so getObject(array) path still works in CI.
Align catalog RG SQL with MODX anonymous ACL: hide only when a non-anonymous ACL closes the group and no principal=0 grant exists. Add SQLite execution coverage for the four review cases.
ebb9dcf to
258219e
Compare
7c0fbfe to
c2c6af3
Compare
|
Реализация сделана аккуратно, и переиспользование подтверждено не на словах: Охват четырёх сниппетов обоснован, в том числе неочевидной деталью. У
Числа: мерж с Но две вещи нужно решить. Суффикс кэша не работает — его никто не читает
Проверил: То есть добавленный суффикс — мёртвый код. Он ни на что не влияет. Это хуже, чем отсутствие фикса: следующий читатель увидит «ключ кэша учитывает видимость» и будет на это полагаться. При этом реальный риск устаревания есть, только другой — штатный ресурсный кэш MODX. По документации некэшируемый вызов через Прошу либо убрать мёртвый суффикс и формулировки о нём, честно записав, что этот пункт не решён, либо решить его по-настоящему — тогда речь про инвалидацию ресурсного кэша при изменении ACL, и это отдельная работа, скорее следующим PR. Конфликт с #677 — семантический, не механическийВы оба стоите на ветке #666 и по-разному переписываете один и тот же метод
Взять одну версию целиком нельзя ни в каком порядке. Если победит То же касается самого Нужно решение, как свести И третье: база тоже уходит на доработкуВ #666 нашёлся баг: ресурс, состоящий в нескольких группах ресурсов, скрывается, даже если одна из групп открыта анониму. Ваш Подробности в комментарии к #666. |
Multi-group membership is OR in modAccessibleObject::checkPolicy. Correlating the anon NOT EXISTS to the same document_group hid resources that also belonged to an open group.
Reuse CatalogResourceGroupVisibility for ms3_products (INNER JOIN ON to avoid pdoTools where false-positives), gallery/options product lookups, and cart validation. Extend pdoTools cache keys with RG+context.
c2c6af3 to
901fc0c
Compare
|
Ответ на ревью — 1. Суффикс кэшаУбран. 2. Конфликт с #677Решение по точкам входа:
Порядок мержа: #666 → #681 → #677. 3. База #666Ребейз на |
8bd5f3e to
286c7f0
Compare
Описание
Классическая Fenom-витрина (
ms3_productsи смежные сниппеты) не учитывала ACL групп ресурсов MODX. Условие видимости берётся из того жеCatalogResourceGroupVisibility, что и публичный Web API (#666). Вms3_productsфрагмент кладётся вINNER JOIN … ON, а не в$where[], чтобы pdoToolsadditionalConditions()не глушил&resources/&context.Depends on #666. После merge #666 — retarget на
beta.Настройка: переиспользуем
ms3_web_catalog_respect_resource_groups(без переименования). Листинг для Fenom — anonymous-safe (как Web API MVP); видимость для участников групп — #669.Тип изменений
Связанные Issues
Closes #670
Как это было протестировано?
composer ci:php/composer test,npm run lint:ci,composer stan/ GitHub Actions CI)Конфигурация тестирования:
Скриншоты (если применимо)
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue)Дополнительные заметки
ms3_gallery/ms3_options/ms3_product_optionsзакрыты черезisVisible()при&product=<id>.ms3_cart/ order-сниппеты — вне scope (данные сессии; вход в корзину черезCartItemManager::validateProduct→apply(), как в feat(web-api): учитывать ACL групп ресурсов в публичном каталоге #666; feat(web-api): msCustomerGroup и ACL групп ресурсов для авторизованных #677 поднимает доapplyForRequest()).pdoResources/pdoMenuдля категорий — вне компонента MiniShop3._rg…кcacheKeyубран:Fetch::run()его не читает. Инвалидация штатного ресурсного кэша MODX при смене ACL — отдельная задача, здесь не решена.buildWhereFragment/isVisible) → feat(web-api): msCustomerGroup и ACL групп ресурсов для авторизованных #677 (расширяетapplyдо request-aware API).