用户角色无法按预期工作
-
16-10-2019 - |
题
创建一个用户角色仅访问销售订单下的视图操作,不会拒绝用户在订单信息页面中编辑帐单和运输地址。
有没有办法修复它?
解决方案
创建自己的控制器更换
Mage_Adminhtml_Sales_OrderController
.在您的控制器中,创建一个
_isAllowed
方法:/** * 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(); }
在你的
adminhtml.xml
, ,添加此:<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>
现在,您可以启用并禁用用户的编辑地址屏幕。
如果要从这些用户隐藏链接,则可以复制
app/design/adminhtml/default/default/template/sales/order/view/info.phtml
转到您的自定义管理主题并替换<div class="tools"><?php echo $this->getAddressEditLink($_order->getBillingAddress())?></div>
有这样的事情:
<?php if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/address')): ?> <div class="tools"><?php echo $this->getAddressEditLink($_order->getBillingAddress())?></div> <?php endif; ?>
并为运输地址做同样的事情。理想情况下,您将呼叫在您自己的块类中拨打了Singleton,但为了简洁起见,我将代码放在模板文件中。