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.
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?
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:
protectedfunction _isAllowed(){returntrue;}
Lub jeśli faktycznie mają zasób ACL zdefiniowany w etc/adminhtml.xml:
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):
Skopiować wszystko poniżej menucelu acl/resources/admin/childreni usunąć <action>węzły.
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.
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:
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 ...
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.
admin
, w rzeczywistości zwraca tylko prawdę dla użytkowników ze wszystkimi uprawnieniami.return true;
jeśli nie ma nic zdefiniowanego dla ACL w twoimconfig.xml
lubadminhtml.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ń.<use>admin</use>
. Zwykle się przedłużająMage_Adminhtml_Controller_Action
.W moim przypadku dla modułów stron trzecich dodanie poniższego kodu do kontrolerów adminhtml działało:
źródło
Powinno być:
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 ...
źródło
app/code/local
, ale wyświetlanie niestandardowych rozszerzeń bez ACL wtedy i tylko wtedy, gdy użytkownik ma uprawnienia,System > Configuration
nie jest tym, czego ktokolwiek by chciał.