Plugin to add a marketplace to Medusa. It is built using Meduse Extender.
⚠️ this plugin is now deprecated and it's recommended to use this repository instead.
- Link users to stores.
- Link products to stores.
- Link orders to stores.
- Create a store for every new user.
- Fetch only the products in the user's store.
- Allow registration of users.
- Fetch only orders of the user's store.
- Allow super admin to see all main orders.
- Allow users to add new users to their team
- Allow users to send invites to new users
- Added a minimal implementation of ACL
You first need to install Medusa Extender in your Medusa store, so please follow the instructions to install it.
After that, install this plugin with NPM:
npm i medusa-marketplace
Make sure that new migrations from the module can be run by adding the property cliMigrationsDirs
into the exported object in medusa-config.js
:
module.exports = {
projectConfig: {
cli_migration_dirs: ['node_modules/medusa-marketplace/dist/**/*.migration.js'],
//existing options...
}
};
Then, run the migrations after you've run Medusa's migrations:
./node_modules/.bin/medex m --run
You can then import each of the modules into src/main.ts
:
import { ProductModule, UserModule, StoreModule, OrderModule, InviteModule, RoleModule, PermissionModule } from 'medusa-marketplace';
And add the modules into the array passed to Medusa.load
:
await new Medusa(__dirname + '/../', expressInstance).load([
UserModule,
ProductModule,
StoreModule,
OrderModule,
InviteModule,
RoleModule,
PermissionModule
]);
Version 1.3.0
introduces a permission guard that allows you to restrict routes based on a specific permission.
To use the permission guard, add it to a router. For example:
import { Router } from 'medusa-extender';
import listProductsHandler from '@medusajs/medusa/dist/api/routes/admin/products/list-products';
import { permissionGuard } from 'medusa-marketplace';
import wrapHandler from '@medusajs/medusa/dist/api/middlewares/await-middleware';
@Router({
routes: [
{
requiredAuth: true,
path: '/admin/products',
method: 'get',
handlers: [
permissionGuard([
{path: "/admin/products"}
]),
wrapHandler(listProductsHandler)
],
},
],
})
export class ProductsRouter {}
This tests that a user has the permission {path: "/admin/products"}
. This means that the user must have at least 1 permission with the metadata
field having the value {path: "/admin/products"}
.
You can pass more than one permission.