You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Bug] Combo-процессоры покупателя и пользователя не режут поля, когда combo не передан #908
Customer\GetListCombobox и System\User\GetList ограничивают набор полей только внутри if ($this->getProperty('combo')) в prepareRow(). В ветке по умолчанию строка уходит как есть — полный toArray() объекта, включая служебные колонки: у msCustomer это token и password, у modUser — password, cachepwd, salt, remote_data.
Админка зовёт оба процессора только с combo=1, так что ветка по умолчанию UI не используется вовсе.
Своего $permission у процессоров нет — это зафиксировано в allowlist ProcessorPermissionsSmokeTest ('read: customer combo' :68, 'read: user combo' :65) как осознанный компромисс для combo-списков. Компромисс опирается на то, что строка порезана до id + fullname, и для ветки по умолчанию он не выполняется.
Ожидаемое поведение
Набор полей ограничен независимо от combo. Хеш пароля, соль и токен покупателя не покидают процессор ни при каком наборе параметров.
Фактическое поведение
publicfunctionprepareRow(xPDOObject$object)
{
$array = $object->toArray();
if ($this->getProperty('combo')) {
$array = [ /* id + fullname */ ];
}
return$array; // без combo — весь toArray()
}
Прецедент в ядре: MODX\Revolution\Processors\Security\User\GetList::prepareRow() (core/src/Revolution/Processors/Security/User/GetList.php:116-124) снимает password, cachepwd и salt безусловно.
Окружение
MiniShop3: 1.14.1-beta2
MODX: 3.x
PHP: 8.2+
Дополнительный контекст
Файлы:
src/Processors/Customer/GetListCombobox.php:56-69
src/Processors/System/User/GetList.php:60-73
Предложение: срезать поля в prepareRow() безусловно — ветку combo оставить как есть, в ветке по умолчанию убрать перечисленные колонки. UI это не затрагивает. Вопрос прав на combo-списки остаётся отдельным — см. #895.
Это не #882: там чинилась склейка id с SQL в тех же файлах, набор полей не трогался. По классу ближе к #840 и #848, но со стороны менеджерского connector'а.
Activity
fix(security): allowlist полей вместо снятия секретов, закрыть GetLis…
fix(mgr-api): пробросить экстраполя msCustomer через allowlist процес…
fix(security): allowlist полей в процессорах покупателя и пользователя (
chore(release): 1.14.3-beta1 (#941)