Доступ Відхилені помилки після встановлення SUPEE-6285


85

Після встановлення патчу SUPEE-6285 в нашому магазині Magento 1.7.0.2 система відображає помилку " Заборонено доступ " при спробі доступу до всіх спеціальних модулів для користувачів, які мають вибіркові дозволи (не всі дозволи). Знімок екрана нижче.

введіть тут опис зображення

Права користувача налаштовані належним чином у ресурсах ролей, і ми повторно застосували параметри дозволу, щоб переконатися, що вони встановлені.

Проблема відтворена в декількох спеціальних розширеннях, тому це не лише одне розширення, яке не працює.

Я вийшов / увійшов, очистив кеш і підтвердив, що компілятор вимкнено.

Хто-небудь може підказати, як вирішити цю проблему?

Відповіді:


129

Як написано тут :

Якщо ви використовуєте обмежені облікові записи адміністратора, деякі меню сторонніх розширень можуть більше не працювати для них. Причина в тому, що повернене значення за замовчуванням Mage_Adminhtml_Controller_Action::_isAllowed()було змінено з trueна Mage::getSingleton('admin/session')->isAllowed('admin'). Розширення, які не змінюють цей метод у своїх контролерах адміністратора, оскільки вони не використовують ACL, тепер потребують привілею "ВСІ" .

Єдине рішення - виправити розширення та додати цей метод до всіх їх адміністраторів:

protected function _isAllowed()
{
    return true;
}

Або якщо вони насправді мають ресурс ACL, визначений у etc/adminhtml.xml:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

Як визначити ідентифікатор ресурсу

Ось як це adminhtml.xmlможе виглядати:

Приклад Mage_Setup (acl)

Візьміть назви вузлів нижче acl/resources/admin/children, пропускаючи наступні childrenвузли.

Як створити відсутні ідентифікатори ресурсів

Якщо є лише <menu>визначення, але немає <acl>визначення, ви також можете визначити своє власне (воно не повинно бути в одному модулі, тому жодні сторонні файли не повинні бути змінені) ::

Приклад налаштування Mage_ (меню)

Скопіюйте всі нижче , menuщоб acl/resources/admin/childrenі видалити <action>вузли.


Автоматичне виправлення

Існує хороший інструмент командного рядка від SupportDesk.nu на https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

Він обробляє більшість пропущених _isAllowed()дзвінків досить добре, але призведе до зламаного коду із затуманеними або зашифрованими вихідними файлами, тому ви все одно повинні перевірити результати вручну.


Щойно перевірене це рішення, і надання дозволу "Інформаційній панелі" не має значення. Чи "Привілей на панель інструментів" збігається з дозволом на "Інформаційну панель" відповідно до ресурсів ролей чи це десь ще?
Кріс

2
Оновлено відповідь, я неправильно трактував конфігурацію для admin, вона фактично повертає істину лише для користувачів з усіма привілеями.
Фабіан Шменглер

3
Будь ласка , не просто робити , return true;якщо немає нічого визначено для ACL в вашому config.xmlабо adminhtml.xml. Замість цього додайте дозволи у файл XML і перевірте їх належним чином. Перегляньте сайт Алана Шторма або тут, щоб дізнатися про створення дозволів.
кель

Це добре працює для користувальницького модуля, але якщо є розділ для налаштування конфігурації, як ми можемо надати доступ до цього блоку?
mjdevloper

1
Контролери для маршрутів, з якими конфігуруються <use>admin</use>. Зазвичай вони поширюються Mage_Adminhtml_Controller_Action.
Фабіан Шменглер

2

У моєму випадку для сторонніх модулів, додавши нижче код до контролерів adminhtml, працювало:

protected function _isAllowed()

{
     return true;
}

-5

Вона повинна бути:

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

У такому випадку він повертає налаштування ACL від Magento. Мені просто цікаво, чи Magento Core Team виправить це за допомогою іншого патча, або це слід зробити в додатку / коді / локальному як глобальне виправлення ...


3
Це не призначена поведінка. Вони спеціально зробили контролери адміністраторів обмежувальними. Тож насправді постачальники розширень змушені зараз оновлюватись.
Фабіан Шменглер

1
Так, так, якщо це працює для вас, виправте це app/code/local, але показуючи власні розширення без ACL, якщо і лише якщо користувач має дозволи, System > Configurationце не те, що хотілося б.
Фабіан Шменглер

Ваше рішення є способом вирішення і не рекомендується! Ви можете повернути true за замовчуванням (як це було в контролері адміністратора перед цим патчем). Краще рішення: правильно налаштувати свої списки контролю доступу.
Маттіас Кляйн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.