Если продавец видит заказы другого магазина, это не просто баг интерфейса, а нарушение изоляции данных. Проблема может затрагивать список заказов, карточку заказа, экспорт, уведомления и API.

Сначала ограничьте доступ к опасным разделам и проверьте, какие данные уже могли быть открыты. Затем ищите место, где потерялся фильтр по продавцу или организации.

Что проверить в первую очередь

  • Проверьте список заказов, детальную карточку, печатные формы и экспорт.
  • Сравните права обычного продавца, менеджера магазина и администратора площадки.
  • Найдите запросы без vendor_id, shop_id или organization_id.
  • Проверьте API отдельно от интерфейса.

Основные причины

Такая проблема редко появляется сама по себе. Обычно ломается связка из нескольких настроек: данные уходят не туда, событие приходит не в том порядке, старая логика остается в кеше или права проверяются не на том уровне. Поэтому сначала нужно отделить симптом от причины.

  • Фильтр по продавцу применен в интерфейсе, но отсутствует в API или SQL.
  • Карточка заказа открывается по id без проверки принадлежности.
  • Роль продавца наследует лишние права администратора.
  • Экспорт и уведомления формируются фоновой задачей без контекста магазина.

Пошаговая диагностика

  • Создайте два тестовых магазина и проверьте доступ к заказам друг друга.
  • Проверьте все endpoint с order_id и customer_id.
  • Посмотрите, какой vendor_id записан в заказе, позиции заказа и выплате.
  • Проверьте кеш списков: не смешивает ли он данные разных продавцов.
  • Снимите аудит просмотров чужих заказов, если логирование уже есть.

Как исправить

Исправление лучше делать небольшими шагами. Сначала зафиксируйте текущее поведение, затем внесите одну правку, проверьте контрольный сценарий и только после этого переходите к следующему месту. Так проще понять, какая именно правка решила проблему.

  • Добавьте проверку принадлежности заказа на уровне сервиса или политики доступа.
  • Фильтруйте не только заказ, но и позиции, файлы, сообщения, возвраты и выплаты.
  • Разделите роли продавца и администратора площадки.
  • Исправьте кеш-ключи так, чтобы они включали vendor_id.
  • Добавьте тесты на невозможность доступа между магазинами.

Безопасный план решения

  • Сделайте резервную копию файлов, базы или конфигурации, если правка затрагивает рабочий проект.
  • Повторите ошибку на тестовом пользователе, заказе, заявке или окружении, чтобы не работать вслепую.
  • Внесите минимальное изменение и сохраните возможность быстрого отката.
  • Проверьте основной сценарий, крайние случаи и права доступа для разных ролей.
  • После выкладки посмотрите логи и реальные события за первые часы работы.

Как проверить результат

  • Продавец A не видит заказы продавца B в списке, карточке, API и экспорте.
  • Прямой URL чужого заказа возвращает 403 или 404.
  • Уведомления и файлы заказа уходят только правильному магазину.
  • Автотесты проверяют чтение и изменение чужого заказа.

Чего не стоит делать

  • Не отключайте проверки, права, платежные статусы или защиту только ради быстрого исчезновения ошибки.
  • Не правьте рабочую базу массовым запросом без выборки, бэкапа и понимания последствий.
  • Не ориентируйтесь только на один успешный тест: проверьте повторный запуск, отмену, ошибку и нестандартные данные.
  • Не оставляйте временные ключи, токены, debug-режим и лишний вывод в публичном доступе.

Как не допустить повторения

  • Вводите vendor-контекст в каждый запрос маркетплейса.
  • Не доверяйте только скрытым кнопкам в интерфейсе.
  • Проверяйте новые отчеты, экспорты и интеграции на tenant-изоляцию.
  • Ведите аудит доступа к чувствительным сущностям.

Что подготовить перед исправлением

  • Ссылку на проблемную страницу, кабинет, заказ, интеграцию или API-метод.
  • Точное время ошибки и пример пользователя, товара, платежа или запроса.
  • Скриншот, текст ошибки, лог веб-сервера, приложения или webhook-события.
  • Краткое описание ожидаемого поведения: что должно было произойти вместо ошибки.

Частые вопросы

Можно ли скрыть чужие заказы только на frontend?

Нет. Frontend-скрытие не защищает API и прямые ссылки. Проверка должна быть на сервере.

Почему ошибка проявляется только у части продавцов?

Часто это связано с ролью, старым кешем, объединенными магазинами или заказами с несколькими продавцами.

Когда стоит обратиться за помощью

Такую проблему стоит исправлять сразу: она затрагивает данные клиентов, продавцов и финансовые операции.

Итог

Маркетплейс должен строго отделять данные продавцов. Я могу проверить права, API, запросы к базе и закрыть доступ к чужим заказам без поломки рабочих сценариев.