From 6c41266af14c282d4e4cbfe7a4e4e5472527649c Mon Sep 17 00:00:00 2001 From: Marjan Date: Sun, 13 Sep 2020 17:10:59 +0200 Subject: [PATCH] magento/magento2#29930: Add to Cart mutations in GraphQl should consider Catalog Permissions Initial draft --- .../Processor/ItemDataCompositeProcessor.php | 45 +++++++++++++++++++ .../Processor/ItemDataProcessorInterface.php | 25 +++++++++++ .../Model/Resolver/AddProductsToCart.php | 32 ++++++++++++- app/code/Magento/QuoteGraphQl/etc/di.xml | 1 + 4 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php create mode 100644 app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php diff --git a/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php new file mode 100644 index 0000000000000..73a22471584ec --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataCompositeProcessor.php @@ -0,0 +1,45 @@ +itemDataProcessors = $itemDataProcessors; + } + + /** + * Process cart item data + * + * @param array $cartItemData + * @param ContextInterface $context + * @return array + */ + public function process(array $cartItemData, ContextInterface $context): array + { + foreach ($this->itemDataProcessors as $itemDataProcessor) { + $cartItemData = $itemDataProcessor->process($cartItemData, $context); + } + + return $cartItemData; + } +} diff --git a/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php new file mode 100644 index 0000000000000..33f40bd28c1d3 --- /dev/null +++ b/app/code/Magento/QuoteGraphQl/Model/CartItem/DataProvider/Processor/ItemDataProcessorInterface.php @@ -0,0 +1,25 @@ +getCartForUser = $getCartForUser; $this->addProductsToCartService = $addProductsToCart; + $this->itemDataProcessor = $itemDataProcessor; } /** @@ -68,6 +78,9 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value $cartItems = []; foreach ($cartItemsData as $cartItemData) { + if (!$this->itemIsAllowedToCart($cartItemData, $context)) { + continue; + } $cartItems[] = (new CartItemFactory())->create($cartItemData); } @@ -90,4 +103,21 @@ function (Error $error) { ) ]; } + + /** + * Check if the item can be added to cart + * + * @param array $cartItemData + * @param ContextInterface $context + * @return bool + */ + private function itemIsAllowedToCart(array $cartItemData, ContextInterface $context): bool + { + $cartItemData = $this->itemDataProcessor->process($cartItemData, $context); + if (isset($cartItemData['grant_checkout']) && $cartItemData['grant_checkout'] === false) { + return false; + } + + return true; + } } diff --git a/app/code/Magento/QuoteGraphQl/etc/di.xml b/app/code/Magento/QuoteGraphQl/etc/di.xml index d230df253221b..35b52dd495c5a 100644 --- a/app/code/Magento/QuoteGraphQl/etc/di.xml +++ b/app/code/Magento/QuoteGraphQl/etc/di.xml @@ -7,6 +7,7 @@ --> +