কীভাবে Magento2 এ মূল প্লাগইনগুলি ওভাররাইড বা অক্ষম করবেন?


15

আমি ম্যাজেন্টো 2 ব্যবহার করে একটি মার্কেটপ্লেস তৈরি করছি। সেই কারণে আমাকে বিক্রেতার গ্রাহকের শংসাপত্রগুলি ব্যবহার করে গ্রাহকের ক্রমটি লোড করতে সক্ষম হওয়া দরকার।

এটির সাথে সমস্যাটি হ'ল ম্যাজেন্টো 2 একটি প্লাগইন ব্যবহার করে যাচাই করে যে কেবলমাত্র এই আদেশের গ্রাহক (বা কোনও প্রশাসক) অর্ডার লোড করতে পারে।

এই ক্ষেত্রে আমার পুরোপুরি প্লাগিনকে ওভাররাইড করতে হবে বা সুরক্ষিত পদ্ধতিটি ওভাররাইড করা উচিত isAllowed()। আমি কোরটি পরিবর্তন না করে কী করতে পারি?

Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization এটা এমন দেখতে:

use Magento\Authorization\Model\UserContextInterface;
use Magento\Framework\Exception\NoSuchEntityException;
class Authorization
{
    /**
     * @var UserContextInterface
     */
    protected $userContext;

    /**
     * @param UserContextInterface $userContext
     */
    public function __construct(
        \Magento\Authorization\Model\UserContextInterface $userContext
    ) {
        $this->userContext = $userContext;
    }

    /**
     * Checks if order is allowed
     *
     * @param \Magento\Sales\Model\ResourceModel\Order $subject
     * @param callable $proceed
     * @param \Magento\Framework\Model\AbstractModel $order
     * @param mixed $value
     * @param null|string $field
     * @return \Magento\Sales\Model\Order
     * @throws NoSuchEntityException
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function aroundLoad(
        \Magento\Sales\Model\ResourceModel\Order $subject,
        \Closure $proceed,
        \Magento\Framework\Model\AbstractModel $order,
        $value,
        $field = null
    ) {
        $result = $proceed($order, $value, $field);
        if (!$this->isAllowed($order)) {
            throw NoSuchEntityException::singleField('orderId', $order->getId());
        }
        return $result;
    }

    /**
     * Checks if order is allowed for current customer
     *
     * @param \Magento\Sales\Model\Order $order
     * @return bool
     */
    protected function isAllowed(\Magento\Sales\Model\Order $order)
    {
        return $this->userContext->getUserType() == UserContextInterface::USER_TYPE_CUSTOMER
            ? $order->getCustomerId() == $this->userContext->getUserId()
            : true;
    }
}

উত্তর:


23

1) আপনি নামে প্লাগইন অক্ষম করতে পারেন। আপনার ক্ষেত্রে এটি authorization

<type name="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization">
    <plugin name="authorization" disabled="true" />
</type>
<type name="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization">
    <plugin name="vendor_name_authorization" type="Vendor\Name\Model\ResourceModel\Plugin\Sales\Order\Authorization" sortOrder="1" />
</type>

তারপরে আপনার নিজের ক্লাস তৈরি করা উচিত, যা ম্যাজেন্টো প্লাগইন ক্লাসটি প্রসারিত করবে। নিজস্ব শ্রেণিতে আপনি সুরক্ষিত পদ্ধতি ওভাররাইট করতে পারেন।

2) আপনি এটি মুছে ফেলা এবং প্লাগইন পুনরায় তৈরি না করে এটি করতে পারেন:

<type name="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization">
    <plugin name="authorization" type="Vendor\Name\Model\ResourceModel\Plugin\Sales\Order\Authorization" sortOrder="1" />
</type>

আপনার প্লাগইন শ্রেণীর নমুনা কোড:

namespace Vendor\Name\Model\ResourceModel\Plugin\Sales\Order;
class Authorization extends \Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization
{
    protected function isAllowed(\Magento\Sales\Model\Order $order)
    {
            ///You code here
    }
}

আমি ওয়েবপিপিস্ট ফোল্ডারে প্লাগইনটি ওভাররাইড করে চেষ্টা করেছি কিন্তু এটি কাজ করছে না
ভরগাভ শাস্ত্রী

6

আপনি যদি সের্গেই.এসএস 1 ম সমাধানটি ব্যবহার করেন তবে আপনি সদৃশ ম্যাজেন্টো \ বিক্রয় \ মডেল \ রিসোর্সমোডেল \ অর্ডার \ প্লাগইন \ অনুমোদনের ত্রুটিটি পেয়ে যাবার সঠিক উপায়টি
হ'ল:

<type name="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization">
    <plugin name="authorization" disabled="true" />
    <plugin name="vendor_name_authorization" type="Vendor\Name\Model\ResourceModel\Plugin\Sales\Order\Authorization" sortOrder="1" />
</type>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.