Zugriff verweigert Fehler nach der Installation von SUPEE-6285
85
Nach der Installation des SUPEE-6285-Patches in unserem Magento 1.7.0.2-Store wird auf dem System der Fehler " Zugriff verweigert " angezeigt, wenn Benutzer mit selektiven Berechtigungen (nicht allen Berechtigungen) auf alle benutzerdefinierten Module zugreifen. Screenshot unten.
Die Benutzerberechtigungen sind in den Rollenressourcen ordnungsgemäß festgelegt, und wir haben die Berechtigungseinstellungen erneut angewendet, um sicherzustellen, dass diese festgelegt sind.
Das Problem wurde über mehrere benutzerdefinierte Erweiterungen hinweg reproduziert, sodass es sich nicht nur um eine einzelne Erweiterung handelt, die nicht funktioniert.
Ich habe mich abgemeldet / angemeldet, den Cache geleert und bestätigt, dass der Compiler deaktiviert ist.
Kann jemand vorschlagen, wie man dieses Problem behebt?
Wenn Sie eingeschränkte Administratorkonten verwenden, funktionieren einige Menüs von Erweiterungen von Drittanbietern möglicherweise nicht mehr für diese. Der Grund dafür ist , dass der Standardrückgabewert Mage_Adminhtml_Controller_Action::_isAllowed()wird von geändert truezu Mage::getSingleton('admin/session')->isAllowed('admin'). Erweiterungen, die diese Methode in ihren Administrator-Controllern nicht überschreiben, weil sie die ACL nicht verwenden, benötigen jetzt das Zugriffsrecht "ALL" .
Die einzige Lösung besteht darin, die Erweiterungen zu patchen und diese Methode allen Administratoren hinzuzufügen:
protectedfunction _isAllowed(){returntrue;}
Oder wenn tatsächlich eine ACL-Ressource definiert ist in etc/adminhtml.xml:
Nehmen Sie die folgenden Knotennamen acl/resources/admin/childrenund überspringen Sie die folgenden childrenKnoten.
So erstellen Sie fehlende Ressourcen-IDs
Wenn es nur eine <menu>Definition, aber keine <acl>Definition gibt, können Sie auch Ihre eigene definieren (diese muss sich nicht im selben Modul befinden, sodass keine Dateien von Drittanbietern geändert werden müssen):
Kopieren Sie alles unten menuauf acl/resources/admin/childrenund entfernen Sie die <action>Knoten.
Es verarbeitet die meisten fehlenden _isAllowed()Aufrufe recht gut, führt jedoch zu fehlerhaftem Code mit verschleierten oder verschlüsselten Quelldateien. Daher sollten Sie die Ergebnisse weiterhin manuell überprüfen.
Diese Lösung wurde gerade getestet, und das Erteilen der Berechtigung "Dashboard" macht keinen Unterschied. Entspricht das "Dashboard-Privileg" der Berechtigung "Dashboard" unter Rollenressourcen oder ist dies an einer anderen Stelle?
Chris
2
Die Antwort wurde aktualisiert. Ich habe die Konfiguration falsch interpretiert admin. Sie gibt nur für Benutzer mit allen Berechtigungen true zurück.
Fabian Schmengler
3
Bitte tun Sie nicht nur, return true;wenn in Ihrem config.xmloder nichts für ACL definiert ist adminhtml.xml. Fügen Sie stattdessen die Berechtigungen zur XML-Datei hinzu und überprüfen Sie sie ordnungsgemäß. Werfen Sie einen Blick auf die Website von Alan Storm oder hier, um Informationen zum Erstellen von Berechtigungen zu erhalten.
Kel
Es funktioniert gut für benutzerdefinierte Module, aber wenn es einen Abschnitt für Konfigurationseinstellungen gibt, wie können wir Zugriff für diesen Block gewähren?
mjdevloper
1
Controller für Routen, die mit konfiguriert sind <use>admin</use>. Sie erstrecken sich normalerweise Mage_Adminhtml_Controller_Action.
Fabian Schmengler
2
In meinem Fall für Module von Drittanbietern hat das Hinzufügen des folgenden Codes zu den AdminHTML-Controllern funktioniert:
In diesem Fall werden die ACL-Einstellungen von Magento zurückgegeben. Ich frage mich nur, ob Magento Core Team es mit einem anderen Patch reparieren wird oder ob dies in app / code / local als globaler Fix durchgeführt werden sollte ...
Dies ist nicht das beabsichtigte Verhalten. Sie haben die Administrator-Controller absichtlich standardmäßig eingeschränkt. Tatsächlich müssen die Erweiterungsanbieter jetzt ein Update durchführen.
Fabian Schmengler
1
Also, ja, wenn das für Sie funktioniert, beheben Sie es in app/code/local, aber benutzerdefinierte Erweiterungen ohne ACL System > Configurationanzuzeigen, wenn und nur wenn der Benutzer Berechtigungen für hat, ist nicht das, was jeder möchte.
Fabian Schmengler
Ihre Lösung ist eine Problemumgehung und wird nicht empfohlen! Sie können standardmäßig true zurückgeben (wie es vor diesem Patch im Admin-Controller war). Die bessere Lösung: Konfigurieren Sie Ihre Zugriffssteuerungslisten richtig.
admin
. Sie gibt nur für Benutzer mit allen Berechtigungen true zurück.return true;
wenn in Ihremconfig.xml
oder nichts für ACL definiert istadminhtml.xml
. Fügen Sie stattdessen die Berechtigungen zur XML-Datei hinzu und überprüfen Sie sie ordnungsgemäß. Werfen Sie einen Blick auf die Website von Alan Storm oder hier, um Informationen zum Erstellen von Berechtigungen zu erhalten.<use>admin</use>
. Sie erstrecken sich normalerweiseMage_Adminhtml_Controller_Action
.In meinem Fall für Module von Drittanbietern hat das Hinzufügen des folgenden Codes zu den AdminHTML-Controllern funktioniert:
quelle
Es sollte sein:
In diesem Fall werden die ACL-Einstellungen von Magento zurückgegeben. Ich frage mich nur, ob Magento Core Team es mit einem anderen Patch reparieren wird oder ob dies in app / code / local als globaler Fix durchgeführt werden sollte ...
quelle
app/code/local
, aber benutzerdefinierte Erweiterungen ohne ACLSystem > Configuration
anzuzeigen, wenn und nur wenn der Benutzer Berechtigungen für hat, ist nicht das, was jeder möchte.