Доступ запрещен после применения Magento SUPEE 6285

Недавно я применил патч SUPEE-6285 для Magento, и теперь у меня возникли проблемы с правами доступа для пользователей без прав администратора. Некоторые разделы администратора были доступны ограниченным пользователям, которые больше не доступны. Если я посмотрю на ресурсы роли для роли, я увижу, что раздел включен, и при входе в эту роль я вижу пункт меню, но если я выберу его, я получу отказ в доступе. 3 расширения, о которых я знаю до сих пор, доставляют мне проблемы:

  1. Commerce Themes - Guess To Registered Customer
    • They add "Manage Guest To Reg" under the "Customers" menu
  2. Adjustware - Abandoned Cart Alerts
    • They add menu items under Newsletter
  3. Adjustware - Review Reminders
    • They add menu items under 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>

person BrianVPS    schedule 08.07.2015    source источник
comment
Также ответили в Magento.StackExchange. См. дополнительную информацию =› magento.stackexchange.com/questions/73646/, а также для этого и других изменений magento.stackexchange.com/questions/73481/   -  person Fiasco Labs    schedule 09.07.2015
comment
Спасибо, @FiascoLabs, я не смог найти их перед публикацией.   -  person BrianVPS    schedule 09.07.2015
comment
Пожалуйста! Пришлось применить исправление к одному модулю, используемому при вводе заказа, чтобы его массовое действие не выдавало сообщение об отказе в доступе и не обнаруживало их первыми, поэтому я подумал, что дам ссылку сюда, чтобы было больше информации.   -  person Fiasco Labs    schedule 10.07.2015


Ответы (4)


Благодаря Рону В. я смог найти полный ответ, который включает меню только для тех, у кого есть разрешение.

Учитывая следующий файл 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');
}
person BrianVPS    schedule 09.07.2015

Вы можете увидеть полное объяснение и решение этой проблемы по следующей ссылке: Решение проблемы с разрешениями для неадминистраторов в модулях после применения патча 6285_CE_1.9.1.1 или обновления до Magento 1.9.2.

Когда мы обновляем/исправляем нашу установку Magento, она применяет небольшое изменение в том, как Magento ведет себя в отношении модулей. Ранее Magento по умолчанию отвечал как true на метод _isAllowed() модуля контроллера, если эта функция не существует. В версии 1.9.2 или когда мы патчим предыдущую версию, она больше не ведет себя так, поэтому пользователи без прав администратора не имеют доступа к установленным модулям.

Для восстановления доступа к модулю не администраторами мы просто добавляем функцию в соответствующий контроллер.

protected function _isAllowed() 
{ 
return true; 
}
person Jesús Amieiro    schedule 10.07.2015
comment
Это хорошее объяснение проблемы, но опять же опасное решение. Смотрите мой принятый ответ выше. Это та же основная идея, но вы должны использовать путь ACL, чтобы разрешить доступ только тем пользователям, которым ДОЛЖЕН иметь доступ. Возвращая true независимо от того, вы открываете его для всех и фактически аннулируете обновление безопасности. - person BrianVPS; 13.07.2015

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

person Jeremy Rimpo    schedule 02.09.2015

Я просто поместил следующий код в контроллер расширения, вызывающего проблему:

protected function _isAllowed(){ 
  return true; 
}

Обновление требует расширения со сценариями в Adminhtml, чтобы быть более безопасным.

person Ron V    schedule 08.07.2015
comment
Спасибо @ron-v! Это сработало, чтобы включить меню, однако это всего лишь пластырь. Он включает меню для всех, даже если им не предоставлено разрешение. Я немного поискал и включил только для тех, у кого есть разрешение, return Mage::getSingleton('admin/session')->isAllowed('path_to/acl_resource'); - person BrianVPS; 09.07.2015
comment
Если нет adminhtml.xml, есть ли другой способ получить ресурс acl? - person Ron V; 09.07.2015
comment
adminhtml.xml новее Magento (думаю, 1.5+?). Раньше ресурсы ACL находились в config.xml. Когда он находится в config.xml, вам просто нужно поместить его в блок <config><adminhtml>...</adminhtml></config>. Хорошим ресурсом для этого является блог Алана Сторма. - person BrianVPS; 10.07.2015