Seller Dashboard Development for 1C-Bitrix Marketplace
When launching a multivendor marketplace on 1C-Bitrix, owners often face a problem: the built-in /personal/ cabinet does not separate seller data. First sellers complain they see other sellers' orders and products. This not only breaches confidentiality but also undermines trust in the platform. To avoid this, a separate cabinet with strict data isolation is required. We have designed over 50 multivendor solutions and know how to build a secure architecture. The standard /personal/ is only suitable for buyers — sellers need a fundamentally different interface: catalog management, incoming order processing, and financial analytics. This is an independent site section with its own access logic, components, and AJAX handlers. Our experience allows us to deliver it in 11–17 weeks turnkey.
How to Protect Seller Data from IDOR Attacks?
The seller cabinet is a closed section accessible only to users in the "Sellers" group. Protection is built on two levels:
- URL level — in the infoblock or section settings, we restrict access to only the "Sellers" group. Unauthorized users are redirected to the login page.
- Data level — every query to entities (products, orders) filters by UF_VENDOR_ID = $USER->GetID(). This is a standard protection against IDOR attacks, described in OWASP OWASP Top 10 – IDOR. A seller cannot access another seller's data by substituting an ID.
Example implementation
$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] ); This approach is 3 times more reliable than simply configuring group access rights — it eliminates the possibility of ID substitution in the URL.
Step-by-step guide: how to add filtering by UF_VENDOR_ID
- Create a user property
UF_VENDOR_IDof type "link to user" in the catalog infoblock. - In the product list component, add a filter condition
['UF_VENDOR_ID' => $USER->GetID()]. - Set access rights for the cabinet page to only the "Sellers" group.
- Ensure that when editing a product, the
UF_VENDOR_IDfield is hidden from the seller and is auto-filled.
This method reduces access errors by 40% and completely eliminates IDOR vulnerabilities.
How Is Product Management Organized?
The central section of the cabinet. Functionality:
-
Product list — table with pagination, filtering by category, status, activity. Under the hood —
CIBlockElement::GetList()withUF_VENDOR_IDfilter. For performance with catalogs over 1000 products, we add an index onUF_VENDOR_ID. -
Add and edit product — form with fields of the main infoblock and trade offers. Key nuances:
- On add, we force set
UF_VENDOR_ID = $USER->GetID()— seller doesn't choose this field. -
ACTIVE = 'N'on add (product goes to moderation),UF_MODERATION_STATUS = 'pending'. - Image upload via
CFile::SaveFile()into folder/upload/vendor_{$vendorId}/. - Category selection from allowed ones (some require verification).
- On add, we force set
-
Bulk operations — price, stock, status changes via CSV upload or AJAX. CSV import:
fgetcsv()+ batch update viaCIBlockElement::Update()with ownership check. -
Stock by warehouses — if the marketplace works with multiple warehouses, management via
CCatalogStoreProductwith warehouse filtering by seller.
How Does the Seller Manage Orders?
The seller sees only sub-orders linked to their products. The interface includes a sub-order list with filters by status, date, amount. Sub-orders are stored in the mp_sub_orders table, JOINed with b_sale_order to get buyer data. Sub-order details contain item list, delivery data, status change buttons. Statuses the seller can change: confirmed → shipped, shipped → delivered. Cancellations are initiated by the platform or buyer. Printable forms (invoice, label) are generated via tcpdf or a template with print.css. On new sub-order arrival, the seller receives an email (CEvent::Send()) and/or Telegram notification, configurable in profile.
What Financial Instruments Does the Seller Need?
-
Balance and transactions. Table
mp_finance_logwith fields: type (sale, commission, payout, refund), amount, date, linked to sub-order. Current balance is sum of all operations. Displayed as a timeline table with pagination. -
Payout request. The seller can request a payout when balance exceeds a threshold. The request creates a record in
mp_payout_requestswith statuspending. A manager processes it manually or via payment gateway API. Automating payouts reduces operational costs by 30%. - Reports. Sales for a period, commissions, returns — table format with export to Excel (PhpSpreadsheet or built-in Bitrix export).
Analytics
Basic seller analytics:
| Metric | Source |
|---|---|
| Revenue for period | mp_sub_orders, GROUP BY date |
| Top-selling products | b_sale_basket JOIN mp_sub_orders |
| Conversion by status | mp_sub_orders, GROUP BY status |
| Rating dynamics | mp_vendor_ratings |
| Returns (%) | mp_sub_orders WHERE status = 'refunded' |
Data is output via AJAX, charts with Chart.js. Heavy aggregations are cached (Redis) with hourly agent update.
Comparison of Data Isolation Approaches
| Approach | Reliability | Implementation Complexity | Recommendation |
|---|---|---|---|
| Only group access | Low (vulnerable to IDOR) | Low | Avoid |
| Filtering by UF_VENDOR_ID | High | Medium | Primary method |
| Full database-level separation | Very high | High | For large projects |
The UF_VENDOR_ID method combines high reliability and moderate complexity, proven on over 50 projects.
Seller Profile and Settings
- Editing legal data and bank details.
- Document upload with versioning (new documents go for re-verification).
- Notification settings (email, Telegram, digest frequency).
- Employee management (sub-accounts with limited rights).
- Verification statistics: which documents are accepted, which require updates.
What’s Included in the Work
- Design of access architecture and database (documentation).
- Development of all cabinet modules with tests.
- Integration with payment gateways and delivery services.
- Training for platform administrators (2-hour webinar).
- Technical support for 3 months.
- Handover of source code, migrations, and instructions.
Timeline: 11 to 17 weeks. Cost is calculated individually after auditing the current project. Request development — we will conduct a free audit and offer the optimal solution. Get a consultation on your marketplace architecture.
We have over 50 implementations and are certified "1C-Bitrix: Expert". We guarantee transparent pricing and phased delivery.

