Skip to content

Seller user permissions ​

Vendors can have multiple SellerUsers administrating their shop. By default, every seller user can create other seller users. If you want that restricted to super seller users only, follow these steps.

1. Restrict access ​

yml
# config/packages/security.yaml
security:
    access_control:
        # ...
        - { path: "%odiseo_marketplace.security.seller_regex%/seller-users", role: ROLE_SUPER_ADMINISTRATION_ACCESS }
        - { path: "%odiseo_marketplace.security.seller_regex%", role: ROLE_ADMINISTRATION_ACCESS }

2. Hide the menu entry for non-super sellers ​

php
<?php
// src/Menu/SellerMenuListener.php

namespace App\Menu;

use Odiseo\SyliusMarketplacePlugin\Entity\SellerUserInterface;
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

final class SellerMenuListener
{
    public function __construct(
        private AuthorizationCheckerInterface $authorizationChecker,
    ) {
    }

    public function menuItems(MenuBuilderEvent $event): void
    {
        $menu = $event->getMenu();

        $configuration = $menu->getChild('configuration');
        $configuration->removeChild('vendor_administrators');

        if ($this->authorizationChecker->isGranted(SellerUserInterface::ROLE_SUPER_ADMINISTRATION_ACCESS)) {
            $configuration
                ->addChild('vendor_administrators', ['route' => 'odiseo_marketplace_seller_seller_user_index'])
                ->setLabel('odiseo_marketplace.menu.seller.main.vendor_administrators')
                ->setLabelAttribute('icon', 'lock')
            ;
        }
    }
}
yml
# config/services.yaml
app.listener.seller.menu_builder:
    class: App\Menu\SellerMenuListener
    arguments:
        - '@security.authorization_checker'
    tags:
        - { name: kernel.event_listener, event: odiseo_marketplace.menu.seller.main, method: menuItems }

by Odiseo