安装SUPEE-6285后访问拒绝错误


85

在我们的Magento 1.7.0.2存储上安装了SUPEE-6285补丁后,系统在尝试访问具有选择性权限(不是所有权限)的用户的所有自定义模块时,显示“ 访问被拒绝 ”错误。屏幕截图如下。

在此处输入图片说明

在“ 角色资源”中正确设置了用户权限,并且我们重新应用了权限设置以确保已设置。

该问题已在多个自定义扩展程序中重现,因此,不仅仅是单个扩展程序无法正常工作。

我已经注销/登录,清除了缓存并确认编译器已禁用。

谁能建议如何解决这个问题?

Answers:


129

由于写在这里

如果您使用受限管理员帐户,则第三方扩展名的某些菜单可能不再适用于它们。原因是默认的返回值Mage_Adminhtml_Controller_Action::_isAllowed()已从更改trueMage::getSingleton('admin/session')->isAllowed('admin')。由于不使用ACL而不在其管理控制器中覆盖此方法的扩展现在需要“ ALL”特权。

唯一的解决方案是修补扩展并将此方法添加到其所有管理控制器中:

protected function _isAllowed()
{
    return true;
}

或者,如果它们实际上具有在中定义的ACL资源etc/adminhtml.xml

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

如何确定资源标识符

adminhtml.xml可能是这样的:

Mage_Setup示例(ACL)

使用下面的节点名称acl/resources/admin/children,跳过以下children节点。

如何创建缺少的资源标识符

如果只有一个<menu>定义但没有<acl>定义,则也可以定义自己的定义(不必在同一模块中,因此无需修改第3方文件):

Mage_Setup示例(菜单)

将以下所有内容复制menuacl/resources/admin/children并删除<action>节点。


自动修复

SupportDesk.nu提供了一个很好的命令行工具,网址为https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

它可以_isAllowed()很好地处理大多数遗漏的呼叫,但会导致代码模糊不清或加密的源文件,因此您仍然应该手动检查结果。


刚刚测试了此解决方案,授予“仪表板”权限没有任何区别。“仪表板特权”与“角色资源”下的“仪表板”许可相同还是在其他地方?
克里斯(Chris)

2
更新了答案,我误解了的配置admin,实际上,它仅对具有所有特权的用户返回true。
Fabian Schmengler,2015年

3
return true;如果您的config.xml或中没有为ACL定义任何内容,请不要只是这样做adminhtml.xml。而是将权限添加到xml文件并正确检查。查看Alan Storm的网站,在此处获取有关创建权限的信息。
凯尔

对于自定义模块,它运行良好,但是如果有用于配置设置的部分,我们如何为该模块提供访问权限?
mjdevloper

1
使用组态的路由的控制器<use>admin</use>。它们通常会延伸Mage_Adminhtml_Controller_Action
Fabian Schmengler,2015年

2

在我的第三方模块中,将以下代码添加到adminhtml控制器中可以工作:

protected function _isAllowed()

{
     return true;
}

-5

它应该是:

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

在这种情况下,它会从Magento返回ACL设置。我只是想知道Magento核心团队是否会使用另一个补丁来修复它,或者应该在应用程序/代码/本地中将其作为全局Fix ...


3
这不是预期的行为。默认情况下,他们故意使管理控制器受到限制。因此,实际上扩展供应商被迫现在进行更新。
Fabian Schmengler,2015年

1
因此,是的,如果对您有用,请在中进行修复app/code/local,但仅当用户具有权限时才显示不带ACL的自定义扩展名,而System > Configuration不是任何人想要的。
Fabian Schmengler,2015年

您的解决方案是一种解决方法,不建议使用!默认情况下,您可以返回true(因为此修补程序之前它在管理控制器中)。更好的解决方案:正确配置访问控制列表。
Matthias Kleine,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.