Błędy odmowy dostępu po zainstalowaniu SUPEE-6285

85

Po zainstalowaniu poprawki SUPEE-6285 w naszym sklepie Magento 1.7.0.2 system wyświetla błąd „ Odmowa dostępu ” podczas próby uzyskania dostępu do wszystkich modułów niestandardowych dla użytkowników, którzy mają uprawnienia selektywne (nie wszystkie). Zrzut ekranu poniżej.

wprowadź opis zdjęcia tutaj

Uprawnienia użytkowników są poprawnie ustawione w zasobach roli, a my ponownie zastosowaliśmy ustawienia uprawnień, aby się upewnić, że są one ustawione.

Problem został odtworzony w wielu niestandardowych rozszerzeniach, więc nie jest to pojedyncze rozszerzenie, które nie działa.

Wylogowałem się / zalogowałem, wyczyściłem pamięć podręczną i potwierdziłem, że kompilator jest wyłączony.

Czy ktoś może zasugerować, jak rozwiązać ten problem?

Chris
źródło

Odpowiedzi:

129

Jak napisano tutaj :

Jeśli korzystasz z ograniczonych kont administratora, niektóre menu rozszerzeń innych firm mogą już nie działać. Powodem jest to, że domyślna wartość zwracana Mage_Adminhtml_Controller_Action::_isAllowed()została zmieniona z truena Mage::getSingleton('admin/session')->isAllowed('admin'). Rozszerzenia, które nie zastępują tej metody w swoich kontrolerach administracyjnych, ponieważ nie używają ACL, teraz potrzebują uprawnienia „WSZYSTKO” .

Jedynym rozwiązaniem jest załatanie rozszerzeń i dodanie tej metody do wszystkich kontrolerów administratora:

protected function _isAllowed()
{
    return true;
}

Lub jeśli faktycznie mają zasób ACL zdefiniowany w etc/adminhtml.xml:

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

Jak ustalić identyfikator zasobu

Tak adminhtml.xmlmoże wyglądać:

Przykład Mage_Setup (acl)

Weź nazwy węzłów poniżej acl/resources/admin/children, pomijając kolejne childrenwęzły.

Jak utworzyć brakujące identyfikatory zasobów

Jeśli istnieje tylko <menu>definicja, ale nie ma <acl>definicji, możesz także zdefiniować własną (nie musi ona znajdować się w tym samym module, więc nie trzeba modyfikować plików innych firm):

Przykład Mage_Setup (menu)

Skopiować wszystko poniżej menucelu acl/resources/admin/childreni usunąć <action>węzły.


Automatyczna poprawka

Na stronie https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd znajduje się dobre narzędzie wiersza polecenia

Obsługuje większość brakujących _isAllowed()wywołań całkiem dobrze, ale spowoduje uszkodzenie kodu z zaciemnionymi lub zaszyfrowanymi plikami źródłowymi, dlatego nadal należy ręcznie sprawdzać wyniki.

Fabian Schmengler
źródło
Właśnie przetestowałem to rozwiązanie, a udzielenie pozwolenia „Dashboard” nie ma znaczenia. Czy uprawnienie „Pulpit nawigacyjny” jest takie samo jak uprawnienie „Pulpit nawigacyjny” w ramach Zasoby roli, czy jest to gdzie indziej?
Chris
2
Zaktualizowałem odpowiedź, błędnie zinterpretowałem konfigurację admin, w rzeczywistości zwraca tylko prawdę dla użytkowników ze wszystkimi uprawnieniami.
Fabian Schmengler,
3
Nie rób tego, return true;jeśli nie ma nic zdefiniowanego dla ACL w twoim config.xmllub adminhtml.xml. Zamiast tego dodaj uprawnienia do pliku xml i sprawdź go poprawnie. Zajrzyj na stronę Alana Storma lub tutaj, aby uzyskać informacje na temat tworzenia uprawnień.
kel
Działa dobrze dla niestandardowego modułu, ale jeśli istnieje sekcja do ustawiania konfiguracji, w jaki sposób możemy dać dostęp do tego bloku?
mjdevloper
1
Kontrolery tras, które są skonfigurowane <use>admin</use>. Zwykle się przedłużają Mage_Adminhtml_Controller_Action.
Fabian Schmengler
2

W moim przypadku dla modułów stron trzecich dodanie poniższego kodu do kontrolerów adminhtml działało:

protected function _isAllowed()

{
     return true;
}
Ankur Jain
źródło
-5

Powinno być:

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

W takim przypadku zwraca ustawienia ACL z Magento. Zastanawiam się tylko, czy Magento Core Team naprawi go inną łatką, czy powinno to zostać zrobione w app / code / local jako globalna poprawka ...

Piotr Siejczuk
źródło
3
To nie jest zamierzone zachowanie. Uczyniły administratorów celowo domyślnie restrykcyjnymi. Tak więc dostawcy rozszerzeń są teraz zmuszeni do aktualizacji.
Fabian Schmengler,
1
Tak, jeśli to działa dla Ciebie, napraw to app/code/local, ale wyświetlanie niestandardowych rozszerzeń bez ACL wtedy i tylko wtedy, gdy użytkownik ma uprawnienia, System > Configurationnie jest tym, czego ktokolwiek by chciał.
Fabian Schmengler,
Twoje rozwiązanie jest obejściem i nie jest zalecane! Domyślnie możesz zwrócić true (tak jak było w kontrolerze administracyjnym przed tą łatką). Lepsze rozwiązanie: poprawnie skonfiguruj swoje listy kontroli dostępu.
Matthias Kleine,