Skip to content

[Bug] Combo-процессоры покупателя и пользователя не режут поля, когда combo не передан #908

Closed

Description

@biz87

Описание проблемы

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. Хеш пароля, соль и токен покупателя не покидают процессор ни при каком наборе параметров.

Фактическое поведение

public function prepareRow(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'а.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingphpPull requests that update php codepriority: highВажно исправить в ближайшее время

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions