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.

Bildbeschreibung hier eingeben

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?

Antworten:


129

Wie hier geschrieben :

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:

protected function _isAllowed()
{
    return true;
}

Oder wenn tatsächlich eine ACL-Ressource definiert ist in etc/adminhtml.xml:

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

So ermitteln Sie die Ressourcenkennung

So adminhtml.xmlkönnte eine aussehen:

Mage_Setup Beispiel (acl)

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):

Mage_Setup Beispiel (Menü)

Kopieren Sie alles unten menuauf acl/resources/admin/childrenund entfernen Sie die <action>Knoten.


Automatische Korrektur

Es gibt ein gutes Befehlszeilentool von SupportDesk.nu unter https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

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:

protected function _isAllowed()

{
     return true;
}

-5

Es sollte sein:

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

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 ...


3
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.
Matthias Kleine
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.