Как создать мультивендорный маркетплейс на Laravel

Создание маркетплейса — это задача по работе с данными.

Большинство разработчиков считают, что самая сложная часть — это панель управления продавца. Это не так. Настоящая проблема заключается в мультиарендности (multi-tenancy). Вы должны гарантировать, что каждый запрос отвечает на один вопрос: Кому принадлежат эти данные?

Если вы создадите обычный магазин, а затем попытаетесь добавить продавцов, вам придется всё переписывать. Вам нужно будет пробрасывать ID продавца через каждую модель, каждый запрос и каждую корзину. Если вы пропустите хотя бы один фильтр, один продавец увидит заказы другого. Это утечка данных.

У вас есть три варианта:

  • Создать самостоятельно: вам придется прописывать каждое условие области видимости (scoping clause). Это дорого и рискованно.
  • Использовать одноарендный (single-tenant) магазин с дополнениями: вы добавляете колонки продавцов в схему, которая для этого не предназначена. Изоляция остается хрупкой.
  • Использовать мультиарендную основу: используйте такой пакет, как Aimeos, который закладывает изоляцию в модель данных с первого дня.

Вот как превратить обычный магазин в маркетплейс с помощью Aimeos:

1. Установите основу

Выполните эту команду для начала: composer create-project aimeos/aimeos myshop

2. Включите режим мультивендорности

Вам не нужно переписывать базу данных. Просто измените одну строку в вашем файле .env: SHOP_MULTISHOP=true

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

3. Включите самостоятельную регистрацию

Чтобы масштабироваться, позвольте продавцам регистрироваться самостоятельно. Добавьте это в ваш .env: SHOP_REGISTRATION=true

Новые продавцы получают доступ только к своему каталогу, заказам и клиентам. Они не могут видеть ничего другого.

Почему это работает:

Aimeos организует всё вокруг «сайта» (site). Каждый товар, цена и заказ несут в себе ID сайта. Слой данных фильтрует это автоматически. Вам не нужно писать where site_id = ?, потому что система делает это за вас.

Этот подход решает три основные проблемы:

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

Хватит заниматься «прокладкой труб». Начните строить свой маркетплейс.

Source: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a