Wie entferne ich die Option Löschen aus der Dropdown-Liste für eine bestimmte Benutzerrolle in Magento2?

8

Ich habe eine andere Benutzerrolle für meine Website. Für eine bestimmte Benutzerrolle möchte ich "Löschen" aus der Dropdown-Liste für Massenaktionen entfernen, die im Kundenraster im Administratorbereich angezeigt wird.

Die Option Löschen wird von gerendert

magento\vendor\magento\module-customer\view\adminhtml\ui_component\customer_listing.xml file.

Ich möchte diese Löschoption nur für Benutzerrolle1 anzeigen und für Benutzerrolle2 ausblenden.

Wie können wir das machen?

Megha
quelle

Antworten:

8

Dies kann durch Erstellen einer neuen Klasse für MassActions erfolgen:

<?php
namespace YourVendor\YourModule\Ui;

class MassAction extends \Magento\Ui\Component\MassAction
{
    private $authorization;

    public function __construct(
        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
        \Magento\Framework\AuthorizationInterface $authorization,
        $components,
        array $data
    ) {
        $this->authorization = $authorization;
        parent::__construct($context, $components, $data);
    }

    public function prepare()
    {
        parent::prepare();
        $config = $this->getConfiguration();
        if (!$this->authorization->isAllowed('YourVendor_YourModule::the_acl_youd_like_to_use')) {
            $allowedActions = [];
            foreach ($config['actions'] as $action) {
                if ('delete' != $action['type']) {
                    $allowedActions[] = $action;
                }
            }
            $config['actions'] = $allowedActions;
        }
        $this->setData('config', (array)$config);
    }
}

Fügen Sie die Einstellung mithilfe der app/code/YourVendor/YourModule/view/adminhtml/ui_component/customer_listing.xmlDatei zur Kundenliste hinzu :

<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <listingToolbar name="listing_top">
        <massaction name="listing_massaction" class="YourVendor\YourModule\Ui\MassAction"/>
    </listingToolbar>
</listing>
Sergii Ivashchenko
quelle
Es hat für mich funktioniert
SCC
Arbeitet in CE 2.3.1
Garry
0

Sie können dies mit dem Plugin ( Best Approach ) tun :

app / code / Devcrew / DeleteRestriction / etc / adminhtml / di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Ui\Component\Product\MassAction">
        <plugin name="hide_delete_from_catalog_massaction" type="Devcrew\DeleteRestriction\Plugin\Catalog\Ui\Component\Product\MassAction" sortOrder="1"/>
    </type>
</config>

app / code / Devcrew / DeleteRestriction / Plugin / Katalog / Ui / Komponente / Produkt / MassAction.php

<?php
namespace Devcrew\DeleteRestriction\Plugin\Catalog\Ui\Component\Product;
class MassAction
{
    public function __construct(  \Magento\Backend\Model\Auth\Session $adminSession)
    {
        $this->_adminSession = $adminSession;
    }
    public function afterIsActionAllowed(

        \Magento\Catalog\Ui\Component\Product\MassAction $subject,
        $isAllowed,
        $actionType
    ) {
        $roleData = $this->_adminSession->getUser()->getRole()->getData();

         //Remove Delete Button for Admin users except Administrators
        if ($actionType == 'delete' && trim($roleData['role_name'])!=='Administrators') {
            return false;
        }

        return $isAllowed;
    }
}
Hafiz Arslan
quelle