Доступ запрещен после применения Magento SUPEE 6285
Я недавно применил патч Magento SUPEE-6285, и теперь у меня возникают некоторые проблемы с разрешениями для пользователей, не являющихся администраторами. Некоторые разделы администратора были доступны для ограниченных пользователей, которые больше не доступны. Если я посмотрю на ресурсы роли для роли, то увижу, что раздел включен, и при входе в эту роль я увижу пункт меню, но если я выберу его, я получу доступ запрещен. 3 расширения, которые я знаю до сих пор, которые доставляют мне неприятности:
- Коммерция Темы - Угадай Зарегистрированному Клиенту
- Они добавляют "Manage Guest To Reg" в меню "Клиенты"
- Настраиваемое оборудование - оповещения об отказе от корзины
- Они добавляют пункты меню под Newsletter
- Adjustware - обзор напоминаний
- Они добавляют пункты меню под Newsletter
Я уверен, что есть другие расширения со схожими проблемами, и это, вероятно, связано с тем, как они реализовали свои страницы администратора, но я пока не смог понять это. У кого-нибудь есть решение?
ОБНОВЛЕНИЕ Я попытался изменить способ определения маршрутизатора, но это не помогло.
БЫЛО:
<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>
4 ответа
Благодаря Рон V I смог найти полный ответ, который включает меню только для тех, кто с разрешения.
Учитывая следующий файл 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');
}
BrianVPS понимает суть ответа "лучшие практики", но этот точный фрагмент, конечно, необходимо модифицировать для каждого модуля и / или контроллера в зависимости от предполагаемого использования.
Некоторые модули не имеют определенного разрешения для своей страницы, и в этом случае - если вы не добавляете новый путь доступа к списку доступа самостоятельно, единственный вариант - вернуть 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
Вы можете увидеть полное объяснение и решение этой проблемы по следующей ссылке: Решение проблемы разрешений для не-администраторов в модулях после применения исправления 6285_CE_1.9.1.1 или обновления до Magento 1.9.2.
Когда мы обновляем / исправляем нашу установку Magento, она применяет небольшое изменение в поведении Magento в отношении модулей. Ранее Magento по умолчанию отвечал как true на метод _isAllowed() модуля контроллера, если эта функция не существует. В версии 1.9.2 или когда мы исправляем предыдущую версию, она больше не ведет себя таким образом, поэтому пользователи без прав администратора не имеют доступа к установленным модулям.
Чтобы восстановить доступ к модулю не администраторами, мы просто добавляем функцию в соответствующий контроллер.
protected function _isAllowed()
{
return true;
}
Я просто поместил следующий код в контроллер расширения, вызывающий проблему:
protected function _isAllowed(){
return true;
}
Обновление требует расширения со скриптами в Adminhtml, чтобы быть более безопасным.