Erros de acesso negado após a instalação do SUPEE-6285

85

Após instalar o patch SUPEE-6285 em nossa loja Magento 1.7.0.2, o sistema mostra um erro " Acesso negado " ao tentar acessar todos os módulos personalizados para usuários que possuem permissões seletivas (nem todas). Captura de tela abaixo.

insira a descrição da imagem aqui

As permissões do usuário estão definidas corretamente em Recursos da função e reaplicamos as configurações de permissão para garantir que elas sejam definidas.

O problema foi reproduzido em várias extensões personalizadas, portanto, não é apenas uma única extensão que não está funcionando.

Efetuei logoff / logoff, limpei o cache e confirmei que o compilador está desabilitado.

Alguém pode sugerir como solucionar isso?

Chris
fonte

Respostas:

129

Como está escrito aqui :

Se você usar contas de administrador restritas, alguns menus de extensões de terceiros poderão não funcionar mais para elas. O motivo é que o valor de retorno padrão de Mage_Adminhtml_Controller_Action::_isAllowed()foi alterado de truepara Mage::getSingleton('admin/session')->isAllowed('admin'). Extensões que não substituem esse método em seus controladores administrativos porque não usam a ACL, agora precisam do privilégio "ALL" .

A única solução é corrigir as extensões e adicionar esse método a todos os seus controladores administrativos:

protected function _isAllowed()
{
    return true;
}

Ou se eles realmente tiverem um recurso ACL definido em etc/adminhtml.xml:

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

Como determinar o identificador de recurso

É assim que um adminhtml.xmlpode parecer:

Exemplo de Mage_Setup (acl)

Pegue os nomes dos nós abaixo acl/resources/admin/children, pulando os seguintes children.

Como criar identificadores de recursos ausentes

Se houver apenas uma <menu>definição, mas nenhuma <acl>definição, você também poderá definir sua própria (ela não precisa estar no mesmo módulo, portanto, nenhum arquivo de terceiros precisa ser modificado) ::

Exemplo de Mage_Setup (menu)

Copie tudo abaixo menuao acl/resources/admin/childrene remover os <action>nós.


Correção automática

Há uma boa ferramenta de linha de comando do SupportDesk.nu em https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

Ele lida com a maioria das _isAllowed()chamadas perdidas muito bem, mas resulta em código quebrado com arquivos de origem ofuscados ou criptografados, portanto, você ainda deve verificar os resultados manualmente.

Fabian Schmengler
fonte
Acabei de testar esta solução e conceder a permissão "Painel" não faz diferença. O "privilégio do painel" é o mesmo que a permissão "Painel" em Recursos da função ou está em outro lugar?
22420 Chris
2
Atualizada a resposta, interpretei mal a configuração admin, na verdade, ela só retorna verdadeira para usuários com todos os privilégios.
Fabian Schmengler
3
Por favor, não faça apenas return true;se não houver nada definido para a ACL no seu config.xmlou adminhtml.xml. Em vez disso, adicione as permissões ao arquivo xml e verifique-o corretamente. Dê uma olhada no site de Alan Storm ou aqui para obter informações sobre como criar permissões.
kel
Está funcionando bem para o módulo personalizado, mas se houver seção para definição de configuração, como podemos dar acesso a esse bloco?
Mjdevloper 13/07/2015
11
Controladores para rotas configuradas com <use>admin</use>. Eles geralmente se estendem Mage_Adminhtml_Controller_Action.
Fabian Schmengler
2

No meu caso para módulos de terceiros, a adição do código abaixo aos adminhtml controllers funcionou:

protected function _isAllowed()

{
     return true;
}
Ankur Jain
fonte
-5

Deveria ser:

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

Nesse caso, ele retorna as configurações de ACL do Magento. Eu estou apenas querendo saber se o Magento Core Team irá corrigi-lo com outro patch ou isso deve ser feito em app / code / local como uma correção global ...

Piotr Siejczuk
fonte
3
Este não é o comportamento pretendido. Eles tornaram os controladores administrativos restritivos por padrão de propósito. Na verdade, os fornecedores de extensão são obrigados a atualizar agora.
Fabian Schmengler
11
Portanto, sim, se isso funcionar para você, corrija-o app/code/local, mas mostrando extensões personalizadas sem ACL, se e somente se o usuário tiver permissões, System > Configurationnão é o que todos desejariam.
Fabian Schmengler
Sua solução é uma solução alternativa e não é recomendada! Você pode retornar true por padrão (como era no controlador administrativo antes deste patch). A melhor solução: configure suas listas de controle de acesso corretamente.
Matthias Kleine