应用 Magento SUPEE 6285 后拒绝访问

Access Denied after applying Magento SUPEE 6285

我最近应用了 Magento 补丁 SUPEE-6285,现在我遇到了非管理员用户的一些权限问题。管理员的某些部分可供受限用户访问,但不再可访问。如果我查看该角色的角色资源,我会看到该部分已启用,并且在登录到该角色时我会看到菜单选项,但如果我选择它,我会看到访问被拒绝。到目前为止,我所知道的 3 个给我带来麻烦的扩展是

  1. 商务主题 - 注册客户猜猜
    • 他们在 "Customers" 菜单下添加了 "Manage Guest To Reg"
  2. Adjustware - 废弃购物车警报
    • 他们在时事通讯下添加了菜单项
  3. Adjustware - 复习提醒
    • 他们在时事通讯下添加了菜单项

我敢肯定还有其他扩展程序也有类似的问题,这可能是由于他们如何实现管理页面,但我还没有弄清楚。有人有解决办法吗?

更新 我尝试更改路由器的定义方式,但没有帮助。

是:

<admin>
    <routers>
        <GuestToReg>
            <use>admin</use>
            <args>
                <module>CommerceThemes_GuestToReg</module>
                <frontName>GuestToReg</frontName>
            </args>
        </GuestToReg>
    </routers>
</admin>

更改为:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <GuestToReg after="Mage_Adminhtml">CommerceThemes_GuestToReg_Adminhtml</GuestToReg>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

我只是将以下代码放入导致问题的扩展程序的控制器中:

protected function _isAllowed(){ 
  return true; 
}

此更新需要使用 Adminhtml 中的脚本进行扩展以提高安全性。

多亏了 Ron V,我才能够找到完整的答案,只为获得许可的人启用菜单。

给定以下 adminhtml.xml 文件:

<config>
    <acl>
        <resources>
            <admin>
                <children>
                    <path_to>
                        <children>
                            <acl_resource>
                                <title>My ACL Resource</title>
                            </acl_resource>
                        </children>
                    </path_to>
                </children>
            </admin>
        </resources>
    </acl>
</config>

您可以提取资源路径以传递给 isAllowed() 以确定是否应向该用户显示此菜单。

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

您可以在下一个link中看到此问题的完整说明和解决方案:Solution to the problem of permissions for non-administrators in modules after applying the patch 6285_CE_1.9.1.1 or upgrade to Magento 1.9.2.

当我们更新/修补我们的 Magento 安装时,它会对 Magento 关于模块的行为方式进行小的更改。以前,如果该函数不存在,Magento 默认响应控制器模块的 _isAllowed() 方法。在版本 1.9.2 或当我们修补以前的版本时,它不再以这种方式运行,因此没有管理员权限的用户无法访问已安装的模块。

要恢复非管理员对模块的访问,我们只需将函数添加到相应的控制器即可。

protected function _isAllowed() 
{ 
return true; 
}

BrianVPS 掌握了 'best practices' 答案的要点,但当然需要根据预期用途为每个模块 and/or 控制器修改确切的片段。

有些模块没有对其页面的特定权限,在这种情况下 - 除非您自己向 acl 添加新的权限路径,否则您唯一的选择是 return true。

但是,如果 acl 权限路径确实存在并且正在使用(它们通常用于确定页面是否在管理菜单栏中绘制),您必须找到该权限路径并将示例字符串替换为isAllowed 函数。

例如,在CommerceThemes/GuestToReg代码中,在etc/adminhtml.xml下可以找到定义的acl路径。

<acl>
    <resources>
        <admin>
            <children>
                <customer>
                    <children>
                        <guesttoreg_adminform>

根据这些路径,设置访问页面的正确权限应该是:

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

放置在管理控制器文件中: app/code/local/CommerceThemes/GuestToReg/controllers/Adminhtml/GuestToRegFormController.php