feat(web-api): msCustomerGroup и ACL групп ресурсов для авторизованных - #677
Conversation
dc060c5 to
15355bc
Compare
|
По существу PR готов — проверил все девять пунктов, критичных проблем нет. Не вливаю только потому, что база (#666) уходит на доработку, и есть неразрешённый конфликт с #681. Подробности ниже. Что подтвердилосьРеализован именно выбранный вариант.
Аноним идёт ровно прежним путём. При отсутствии токен-сервиса, отсутствующем или истёкшем токене, заблокированном покупателе, покупателе без группы, неактивной группе и Существующие покупатели не ломаются. В публичный ответ ничего не утекает. И Миграция и схема согласованы. Роуты закрыты Отдельно отмечу решение по кэшу — оно лучше того, что я предполагал в issue. Резолв не кэшируется персистентно, а сегментом ключа кэша фасетов служит хеш от текущего набора разрешённых групп. При смене группы покупателя или правке ACL ключ меняется сам на следующем запросе, ручная инвалидация не нужна. Вопрос из #669 про «где хранить и когда сбрасывать» закрыт элегантно. N+1 нет — фильтр остаётся условием запроса, а Числа: мерж с актуальной Что мешает влить прямо сейчасБаза уходит на доработку. В #666 нашёлся баг: ресурс, состоящий в нескольких группах ресурсов, скрывается, даже если одна из групп открыта анониму — членство в MODX работает как ИЛИ, а SQL проверяет попарно внутри одной строки членства. Ваш Конфликт с #681. Вы оба стоите на ветке #666 и по-разному переписываете То же и с самим Нужно ваше решение, как свести Мелочи, на усмотрение
|
15355bc to
f99931d
Compare
|
Сведено с #681 и пофикшенным #666. Порядок мержа: #666 → #681 → #677 (база PR переключена на API в одной точке входа
Multi-group (#666): Мелочи из ревью
|
|
Уточнение по базе: GitHub не даёт сменить base у stacked PR ( |
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.
Authenticated catalog visitors resolve allowed resource groups via a customer group → modUserGroup link, reusing the #666 SQL visibility gate.
f99931d to
0f20d00
Compare
Описание
Продолжение #659/#666: анонимный фильтр групп ресурсов уже скрывает закрытые разделы, но авторизованный
msCustomerдля MODX всё ещё гость. Добавлена сущностьmsCustomerGroupсо ссылкой наmodUserGroup; видимость каталога считается черезaccess_resource_groupsи тот же SQL-контур, без второго реестра прав и безmodUserна каждого покупателя.Depends on #666 (база PR — ветка
feat/issue-659-catalog-resource-groups).Тип изменений
Связанные Issues
Closes #669
Depends on #666 / Refs #659
Как это было протестировано?
После деплоя:
phinx migrate(таблицаms3_customer_groups+customer_group_id).composer ci:php/composer test,npm run lint:ci,composer stan/ GitHub Actions CI)Конфигурация тестирования:
feat/issue-669-customer-resource-groupsповерх feat(web-api): учитывать ACL групп ресурсов в публичном каталоге #666Скриншоты (если применимо)
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue)Дополнительные заметки
MVP: одна группа на покупателя, без Vue UI, без чистки корзины при потере доступа. Manager API:
/api/mgr/customer-groups+customer_group_idвPUT /customers/{id}. Web profile не отдаёт и не пишетcustomer_group_id. Blocked/inactive покупатель остаётся на anonymous-гейте. После merge #666 перенацелить PR наbeta.