Accesso agli errori negati dopo l'installazione di SUPEE-6285


85

Dopo aver installato la patch SUPEE-6285 sul nostro archivio Magento 1.7.0.2, il sistema mostra un errore " Accesso negato " quando tenta di accedere a tutti i moduli personalizzati per gli utenti che dispongono di autorizzazioni selettive (non tutte le autorizzazioni). Screenshot sotto.

inserisci qui la descrizione dell'immagine

Le autorizzazioni utente sono impostate correttamente in Risorse ruolo e abbiamo applicato nuovamente le impostazioni delle autorizzazioni per assicurarci che siano impostate.

Il problema è stato riprodotto su più estensioni personalizzate, quindi non è solo una singola estensione che non funziona.

Ho effettuato il logout / in, cancellato la cache e confermato che il compilatore è disabilitato.

Qualcuno può suggerire come risolvere questo?

Risposte:


129

Come scritto qui :

Se si utilizzano account di amministratore con restrizioni, alcuni menu di estensioni di terze parti potrebbero non funzionare più per loro. Il motivo è che il valore di ritorno predefinito di Mage_Adminhtml_Controller_Action::_isAllowed()è stato modificato da truea Mage::getSingleton('admin/session')->isAllowed('admin'). Le estensioni che non sostituiscono questo metodo nei loro controller di amministrazione perché non usano l'ACL, ora hanno bisogno del privilegio "TUTTO" .

L'unica soluzione è patchare le estensioni e aggiungere questo metodo a tutti i loro controller di amministrazione:

protected function _isAllowed()
{
    return true;
}

O se in realtà hanno una risorsa ACL definita in etc/adminhtml.xml:

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

Come determinare l'identificatore di risorsa

Ecco come adminhtml.xmlpotrebbe apparire:

Esempio di Mage_Setup (acl)

Prendi i nomi dei nodi seguenti acl/resources/admin/children, saltando i seguenti childrennodi.

Come creare identificatori di risorse mancanti

Se esiste solo una <menu>definizione ma nessuna <acl>definizione, puoi anche definirne una tua (non deve essere all'interno dello stesso modulo, quindi non è necessario modificare alcun file di terze parti) ::

Esempio di Mage_Setup (menu)

Copiare tutto sotto menuper acl/resources/admin/childrene togliere i <action>nodi.


Correzione automatica

Esiste un buon strumento da riga di comando di SupportDesk.nu su https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

Gestisce _isAllowed()abbastanza bene la maggior parte delle chiamate mancanti ma si tradurrà in codice rotto con file di origine offuscati o crittografati, quindi dovresti comunque controllare i risultati manualmente.


Ho appena testato questa soluzione e dare l'autorizzazione "Dashboard" non fa differenza. Il "privilegio Dashboard" è uguale all'autorizzazione "Dashboard" in Risorse ruolo o è altrove?
Chris,

2
Aggiornata la risposta, ho erroneamente interpretato la configurazione admin, in realtà restituisce vero solo per gli utenti con tutti i privilegi.
Fabian Schmengler,

3
Si prega di non farlo solo return true;se non è stato definito nulla per ACL nel proprio config.xmlo adminhtml.xml. Aggiungi invece le autorizzazioni al file xml e controllalo correttamente. Dai un'occhiata al sito di Alan Storm o qui per informazioni sulla creazione di autorizzazioni.
Kel

Funziona bene per il modulo personalizzato ma se esiste una sezione per l'impostazione della configurazione, come possiamo dare accesso a questo blocco?
mjdevloper,

1
Controller per route configurate <use>admin</use>. Di solito si estendono Mage_Adminhtml_Controller_Action.
Fabian Schmengler,

2

Nel mio caso per i moduli di terze parti, l'aggiunta del codice seguente ai controller adminhtml ha funzionato:

protected function _isAllowed()

{
     return true;
}

-5

Dovrebbe essere:

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

In tal caso, restituisce le impostazioni ACL da Magento. Mi chiedo solo se Magento Core Team lo risolverà con un'altra patch o se ciò dovrebbe avvenire in app / code / local come correzione globale ...


3
Questo non è il comportamento previsto. Hanno reso i controller di amministrazione restrittivi di default appositamente. Quindi in realtà i fornitori di estensioni sono costretti ad aggiornare ora.
Fabian Schmengler,

1
Quindi, sì, se funziona per te, risolvilo app/code/local, ma mostrando estensioni personalizzate senza ACL se e solo se l'utente dispone delle autorizzazioni System > Configurationnon è ciò che tutti vorrebbero.
Fabian Schmengler,

La soluzione è una soluzione alternativa e non è consigliata! È possibile restituire true per impostazione predefinita (come era nel controller di amministrazione prima di questa patch). La soluzione migliore: configura correttamente gli elenchi di controllo di accesso.
Matthias Kleine,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.