Pregunta

Crear un rol de usuario para acceder solo a la acción de vista bajo el pedido de ventas, no le niega al usuario editar la dirección de facturación y envío en la página de información del pedido.

enter image description here

¿Hay alguna forma de arreglarlo?

¿Fue útil?

Solución

  1. Crea tu propio controlador reemplazando Mage_Adminhtml_Sales_OrderController.

  2. En su controlador, cree un _isAllowed método:

    /**
     * Acl check for admin
     *
     * @return bool
     */
    protected function _isAllowed()
    {
        $action = strtolower($this->getRequest()->getActionName());
    
        $aclResource = null;
        switch ($action) {
            case 'addressSave':
            case 'address':
                $aclResource = 'sales/order/actions/address';
                break;
        }
    
        if ($aclResource !== null) {
            return Mage::getSingleton('admin/session')->isAllowed($aclResource);
        }
    
        return parent::_isAllowed();
    }
    
  3. En tus adminhtml.xml, Agrega esto:

    <config>
        <acl>
            <resources>
                <admin>
                    <children>
                        <sales>
                            <children>
                                <order>
                                    <children>
                                        <actions>
                                            <children>
                                                <address translate="title"><title>Edit Address</title></address>
                                            </children>
                                        </actions>
                                    </children>
                                </order>
                            </children>
                        </sales>
                    </children>
                </admin>
            </resources>
        </acl>
    <config>
    

    Ahora puede habilitar y deshabilitar la pantalla Editar dirección para los usuarios.

  4. Si desea ocultar el enlace de estos usuarios, puede copiar app/design/adminhtml/default/default/template/sales/order/view/info.phtml a su tema de administración personalizado y reemplazar

    <div class="tools"><?php echo $this->getAddressEditLink($_order->getBillingAddress())?></div>
    

    Con algo como esto:

    <?php if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/address')): ?>
    <div class="tools"><?php echo $this->getAddressEditLink($_order->getBillingAddress())?></div>
    <?php endif; ?>
    

    y hacer lo mismo para la dirección de envío. Idealmente, pones la llamada al singleton en tu propia clase de bloque, pero pongo el código en el archivo de plantilla en aras de la brevedad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top