Magento 1.8.1.0 - SUPEE-7405 - Ajax 调用重定向到非管理员帐户上的仪表板


Magento 1.8.1.0 - SUPEE-7405 - Ajax call redirects to dashboard on non-admin accounts

我刚刚在Magento 1.8.1.0上安装了SUPEE-7405补丁。

登录非管理员帐户后,我编辑购物车规则(促销>购物车规则)

在第三个选项卡(操作)中,我添加了一个新条件(类别),单击三个点后,单击文本框右侧的窗口状按钮(应该向您显示类别列表的按钮)。

这是对"/promo_widget/chooser/attribute/category_ids/form/rule_actions_fieldset/key/40c88f1400c874b61b75c5388b43af9f/?isAjax=true"的ajax调用

ajax 调用引发 403(禁止访问),然后页面重定向到仪表板。

检查了补丁修改的所有文件后,我无法弄清楚出了什么问题。

这在管理员帐户上工作正常,所以也许这是一个 ACL 问题,但用户角色的权限很好,并且在补丁之前就有效了。

这是与受限管理员角色/ACL 规则相关的错误。

文件: app/code/core/Mage/Adminhtml/controllers/Promo/WidgetController.php

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('promo/catalog');
}

如果您只为管理员用户启用了"购物车价格规则",而不是"目录价格规则",那么在使用小部件时可能会发生错误(例如"操作"选项卡中的类别小部件。

有两种可能性可以解决这个问题:

  1. 也向管理员角色授予对目录价格规则的访问权限
  2. 通过以下方式覆盖方法 "is_Allowed()":

protected function _isAllowed() { return Mage::getSingleton('admin/session')->isAllowed('promo/catalog') || Mage::getSingleton('admin/session')->isAllowed('promo/quote'); }

听起来您需要先安装以前的Magento SUPEE补丁补丁(特别是SUPEE-6788),因为:

这是对"/promo_widget/chooser..."

这种形式的管理员路由已被弃用,SUPEE-6788 会将其替换为"/index.php/admin/promo_widget/chooser..."。

这在管理员帐户上工作正常,所以也许这是一个 ACL 问题,但用户角色的权限很好,并且在补丁之前就有效了。

SUPEE-6788 还将管理员中的默认权限级别从"全部允许"更改为"拒绝所有",除非在管理控制器中明确定义。

此更改意味着将始终允许"超级管理员"角色用户访问任何管理员页面,因为该角色将"全部允许"作为高级标志,而其他角色可能具有单独的 ACL 设置,并且以前依赖于未明确设置为"允许"而不是"拒绝"的 ACL。在这种情况下,预计会出现 403 权限被拒绝错误。

您可以通过将以下方法添加到模块的管理控制器来解决此问题(如果是自定义模块):

/**
 * Check is allowed access to action
 *
 * @return bool
 */
protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('your/acl/path');
}

403 权限被拒绝错误的另一种可能性是,由于它是 AJAX 请求,因此可能需要确保将表单密钥添加到 AJAX 请求中。如果是这种情况,则可能是您修改了核心模板或用本地主题版本覆盖了它。如果是这种情况,请浏览模板版本与核心版本进行比较,然后复制修补程序中的任何更改。


如果您有必须更新的自定义模块,则安装 SUPEE-6788 是一个痛苦的**,但一般来说,建议在安装新安全补丁之前安装所有以前的安全补丁。

一个有用的资源是Magento StackExchange对SUPEE-7405更改的参考,以及哪些文件受到影响 - 请参阅此处。