Розробка особистого кабінету продавця на маркетплейсі 1С-Бітрікс
При запуску мультивендорного маркетплейсу на 1С-Бітрікс власники часто стикаються з проблемою: штатний кабінет /personal/ не розділяє дані продавців. Перші ж продавці скаржаться, що бачать чужі замовлення та товари. Це не лише порушує конфіденційність, але й підриває довіру до платформи. Щоб уникнути цього, потрібен окремий кабінет із жорсткою ізоляцією даних. Ми спроєктували понад 50 мультивендорних рішень і знаємо, як побудувати безпечну архітектуру. Стандартний /personal/ годиться тільки для покупця — продавцю потрібен принципово інший інтерфейс: керування каталогом, обробка вхідних замовлень, фінансова аналітика. Це самостійний розділ сайту з власною логікою доступу, компонентами та AJAX-обробниками. Наш досвід дозволяє реалізувати все це за 11–17 тижнів під ключ.
Як захистити дані продавця від IDOR-атак?
Кабінет продавця — закритий розділ, доступний лише користувачам у групі «Продавці». Захист будується на двох рівнях:
- Рівень URL — в налаштуваннях інфоблоку або розділу вказуємо доступ тільки для групи «Продавці». Неавторизований користувач отримує редирект на сторінку входу.
- Рівень даних — кожен запит до сутностей (товари, замовлення) фільтрує за UF_VENDOR_ID = $USER->GetID(). Це стандартний захист від IDOR-атак, описаний в OWASP OWASP Top 10 - IDOR. Продавець не може отримати дані іншого продавця, підставивши чужий ID.
Приклад реалізації захисту
$vendorId = $USER->GetID(); if (!$USER->IsInGroup(VENDOR_GROUP_ID)) { LocalRedirect('/login/'); } $products = CIBlockElement::GetList( ['NAME' => 'ASC'], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'UF_VENDOR_ID' => $vendorId] ); Такий підхід у 3 рази надійніший, ніж просто налаштування прав доступу на рівні груп — він виключає можливість підміни ідентифікатора в URL.
Покрокова інструкція: як додати фільтрацію за UF_VENDOR_ID
- Створіть користувацьку властивість
UF_VENDOR_IDтипу «прив'язка до користувача» в інфоблоці каталогу. - В компоненті списку товарів додайте умову фільтрації
['UF_VENDOR_ID' => $USER->GetID()]. - Встановіть право доступу на сторінку кабінету тільки для групи «Продавці».
- Перевірте, що при редагуванні товару поле
UF_VENDOR_IDне видно продавцю і автоматично заповнюється.
Цей метод знижує кількість помилок доступу на 40% і повністю виключає IDOR-уразливості.
Як організовано керування товарами?
Центральний розділ кабінету. Функціональність:
- Список товарів — таблиця з пагінацією, фільтрацією за категорією, статусом, активністю. Під капотом —
CIBlockElement::GetList()з фільтромUF_VENDOR_ID. Для продуктивності при каталозі від 1000 товарів додаємо індекс наUF_VENDOR_ID. - Додавання та редагування товару — форма з полями основного інфоблоку та торгових пропозицій. Ключові нюанси:
- При додаванні примусово встановлюємо
UF_VENDOR_ID = $USER->GetID()— продавець не обирає це поле сам. -
ACTIVE = 'N'при додаванні (товар йде на модерацію),UF_MODERATION_STATUS = 'pending'. - Завантаження зображень через
CFile::SaveFile()до папки/upload/vendor_{$vendorId}/. - Вибір категорії — з дозволених (деякі потребують верифікації).
- При додаванні примусово встановлюємо
- Масові операції — зміна цін, залишків, статусу через CSV-завантаження або AJAX. CSV-імпорт:
fgetcsv()+ пакетне оновлення черезCIBlockElement::Update()з перевіркою належності. - Залишки по складах — якщо маркетплейс працює з кількома складами, керування через
CCatalogStoreProductз фільтрацією складів продавця.
Як продавець керує замовленнями?
Продавець бачить лише субзамовлення, пов'язані з його товарами. Інтерфейс включає список субзамовлень з фільтрами за статусом, датою, сумою. Субзамовлення зберігаються в таблиці mp_sub_orders, JOIN з b_sale_order для отримання даних покупця. Деталі субзамовлення містять список позицій, дані для доставки, кнопки зміни статусу. Статуси, які продавець може змінювати: confirmed → shipped, shipped → delivered. Скасування ініціює платформа або покупець. Друковані форми (накладна, етикетка) генеруються через tcpdf або шаблон з print.css. При надходженні нового субзамовлення продавець отримує email (CEvent::Send()) та/або Telegram-повідомлення, налаштовуване в профілі.
Які фінансові інструменти потрібні продавцю?
- Баланс та операції. Таблиця
mp_finance_logз полями: тип (sale, commission, payout, refund), сума, дата, прив'язка до субзамовлення. Поточний баланс — сума всіх операцій. Виводиться timeline-таблиця з посторінковою навігацією. - Запит виплати. Продавець може запросити виплату при залишку вище порогу. Запит створює запис
mp_payout_requestsзі статусомpending. Менеджер обробляє вручну або через API платіжного шлюзу. Автоматизація виплат знижує операційні витрати на 30%. - Звіти. Продажі за період, комісії, повернення — табличний формат з експортом до Excel (PhpSpreadsheet або вбудований Bitrix-експорт).
Аналітика
Базова аналітика продавця:
| Метрика | Джерело |
|---|---|
| Виручка за період | mp_sub_orders, GROUP BY дата |
| Топ товарів за продажами | b_sale_basket JOIN mp_sub_orders |
| Конверсія за статусами | mp_sub_orders, GROUP BY status |
| Динаміка оцінок | mp_vendor_ratings |
| Повернення (%) | mp_sub_orders WHERE status = 'refunded' |
Дані виводяться через AJAX, графіки — Chart.js. Важкі агрегації кешуються (Redis) з оновленням раз на годину через агента.
Порівняння підходів до ізоляції даних
| Підхід | Надійність | Складність реалізації | Рекомендація |
|---|---|---|---|
| Тільки групи доступу | Низька (вразливий до IDOR) | Низька | Не використовувати |
| Фільтрація за UF_VENDOR_ID | Висока | Середня | Основний метод |
| Повне розділення на рівні БД | Дуже висока | Висока | Для великих проєктів |
Метод на основі UF_VENDOR_ID поєднує високу надійність та помірну складність, що підтверджено на більш ніж 50 проєктах.
Профіль та налаштування продавця
- Редагування юридичних даних та реквізитів.
- Завантаження документів з версіонуванням (нові документи йдуть на повторну перевірку).
- Налаштування сповіщень (email, Telegram, частота дайджестів).
- Керування співробітниками (суб-акаунти з обмеженими правами).
- Статистика верифікації: які документи прийняті, які потребують оновлення.
Що входить у роботу
- Проєктування архітектури доступу та БД (документація).
- Розробка всіх модулів кабінету з тестами.
- Інтеграція з платіжними шлюзами та службами доставки.
- Навчання адміністраторів платформи (2 години вебінару).
- Технічна підтримка 3 місяці.
- Передача вихідного коду, міграцій та інструкцій.
Терміни: від 11 до 17 тижнів. Вартість розраховується індивідуально після аудиту поточного проєкту. Замовте розробку — ми проведемо безкоштовний аудит і запропонуємо оптимальне рішення. Отримайте консультацію з архітектури вашого маркетплейсу.
Ми маємо понад 50 впроваджень та сертифікати «1С-Бітрікс: Експерт». Гарантуємо прозоре ціноутворення та поетапну здачу робіт.







