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

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

  1. Коммерция Темы - Угадай Зарегистрированному Клиенту
    • Они добавляют "Manage Guest To Reg" в меню "Клиенты"
  2. Настраиваемое оборудование - оповещения об отказе от корзины
    • Они добавляют пункты меню под Newsletter
  3. 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, чтобы быть более безопасным.

Другие вопросы по тегам