El rol de usuario no funciona como se esperaba
-
16-10-2019 - |
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.
¿Hay alguna forma de arreglarlo?
Solución
Crea tu propio controlador reemplazando
Mage_Adminhtml_Sales_OrderController
.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(); }
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.
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.