Как создать мультивендорный маркетплейс на 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
