Описание функции
- Единый serializer/DTO покупателя для Web API без секретов (
password, token, lock counters, privacy_ip, …).
- Allowlist редактируемых полей для
POST /customer/add и PUT /customer/profile вместо «весь fieldMeta минус blacklist».
Проблема, которую решает
Сейчас #410 (утечка toArray) и #413 (privacy_accepted_at) — симптомы отсутствия контракта «что клиент видит/может менять». Extra fields через Object Extension должны попадать в allowlist явно.
Предлагаемое решение
CustomerPublicDto::fromModel(msCustomer): array
- Константа/конфиг
PROFILE_EDITABLE_FIELDS (+ dynamic extra fields из map с флагом editable)
- Использовать DTO во всех Web customer-ответах (login/register/profile/add)
Альтернативные варианты
Точечно чистить ключи в каждом контроллере — легко забыть (как сейчас).
Примеры использования
return $this->success($msg, ['customer' => CustomerPublicDto::from($customer)]);
Дополнительный контекст
Закрывает класс утечек рядом с #410/#413; дополняет #341 (envelope) на уровне payload.
Описание функции
password,token, lock counters,privacy_ip, …).POST /customer/addиPUT /customer/profileвместо «весь fieldMeta минус blacklist».Проблема, которую решает
Сейчас
#410(утечка toArray) и#413(privacy_accepted_at) — симптомы отсутствия контракта «что клиент видит/может менять». Extra fields через Object Extension должны попадать в allowlist явно.Предлагаемое решение
CustomerPublicDto::fromModel(msCustomer): arrayPROFILE_EDITABLE_FIELDS(+ dynamic extra fields из map с флагом editable)Альтернативные варианты
Точечно чистить ключи в каждом контроллере — легко забыть (как сейчас).
Примеры использования
Дополнительный контекст
Закрывает класс утечек рядом с #410/#413; дополняет #341 (envelope) на уровне payload.