I have one question about showing products. I dont want to show products for guest user. Even when they search for those products they will not get that. Only logged in user will get those.

Can anyone give me some tips how we can implement this?

  • you can't show product for guest user right? in all category. Feb 6, 2019 at 9:48
  • I have specific product which I dont want to not even in category, added one attribute in admin if that is active only then product will show for logged in user
    – Daniel_12
    Feb 6, 2019 at 9:50
  • show thoes product show to admin product level attribute is active for login custome ? Feb 6, 2019 at 9:54
  • I want to hide them in search, Just not sure which event I should use for this
    – Daniel_12
    Feb 6, 2019 at 9:55

3 Answers 3


You may use a plugin after Magento\Catalog\Model\Product::getVisibility() and set the return value to Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE if you have a guest user (i.e. the customer is not logged in) and your product attribute is set. Your custom attribute needs to be available in product lists otherwise loading a specific product collection could miss it.


If customer is not logged-in you can restrict customer from category and product page.

Check the following module


You can add custom controller path in "webrestrictions.xml" if you override this file in your module


Alternate solution you can use before Plugin for below class for execute method


You can use events in this approach

event name = catalog_block_product_list_collection

in the execute function you can remove all products like this

add events.xml to your module


<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_block_product_list_collection">
        <observer instance="{vendor}\{module}\Observer\Frontend\Catalog\BlockProductListCollection" name="{vendor}_{module}_observer_frontend_catalog_blockproductlistcollection_catalog_block_product_list_collection"/>

and this code to your observer file



namespace {Vendor}\{Module}\Observer\Catalog;

class BlockProductListCollection implements \Magento\Framework\Event\ObserverInterface

    public function execute(
        \Magento\Framework\Event\Observer $observer
    ) {

        // if(customer is not loggedin) 
    $collection = $observer->getEvent()->getCollection();
        foreach ($collection as $k => $product){


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.