创建一个用户角色仅访问销售订单下的视图操作,不会拒绝用户在订单信息页面中编辑帐单和运输地址。

enter image description here

有没有办法修复它?

有帮助吗?

解决方案

  1. 创建自己的控制器更换 Mage_Adminhtml_Sales_OrderController.

  2. 在您的控制器中,创建一个 _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();
    }
    
  3. 在你的 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>
    

    现在,您可以启用并禁用用户的编辑地址屏幕。

  4. 如果要从这些用户隐藏链接,则可以复制 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,但为了简洁起见,我将代码放在模板文件中。

许可以下: CC-BY-SA归因
scroll top