应用 Magento SUPEE 6285 后拒绝访问
Access Denied after applying Magento SUPEE 6285
我最近应用了 Magento 补丁 SUPEE-6285,现在我遇到了非管理员用户的一些权限问题。管理员的某些部分可供受限用户访问,但不再可访问。如果我查看该角色的角色资源,我会看到该部分已启用,并且在登录到该角色时我会看到菜单选项,但如果我选择它,我会看到访问被拒绝。到目前为止,我所知道的 3 个给我带来麻烦的扩展是
- 商务主题 - 注册客户猜猜
- 他们在 "Customers" 菜单下添加了 "Manage Guest To Reg"
- Adjustware - 废弃购物车警报
- 他们在时事通讯下添加了菜单项
- 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
我最近应用了 Magento 补丁 SUPEE-6285,现在我遇到了非管理员用户的一些权限问题。管理员的某些部分可供受限用户访问,但不再可访问。如果我查看该角色的角色资源,我会看到该部分已启用,并且在登录到该角色时我会看到菜单选项,但如果我选择它,我会看到访问被拒绝。到目前为止,我所知道的 3 个给我带来麻烦的扩展是
- 商务主题 - 注册客户猜猜
- 他们在 "Customers" 菜单下添加了 "Manage Guest To Reg"
- Adjustware - 废弃购物车警报
- 他们在时事通讯下添加了菜单项
- 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