Erreurs d'accès refusé après l'installation de SUPEE-6285


85

Après avoir installé le correctif SUPEE-6285 sur notre magasin Magento 1.7.0.2, le système affiche une erreur " Accès refusé " lors de la tentative d'accès à tous les modules personnalisés pour les utilisateurs disposant d'autorisations sélectives (pas toutes). Capture d'écran ci-dessous.

entrez la description de l'image ici

Les autorisations utilisateur sont correctement définies dans les ressources de rôle et nous avons réappliqué les paramètres d'autorisation afin de nous assurer qu'ils sont définis.

Le problème a été reproduit sur plusieurs extensions personnalisées. Ce n'est donc pas une extension unique qui ne fonctionne pas.

Je me suis déconnecté / connecté, j'ai vidé le cache et confirmé que le compilateur est désactivé.

Quelqu'un peut-il suggérer comment résoudre ce problème?

Réponses:


129

Comme écrit ici :

Si vous utilisez des comptes d’administrateur restreints, certains menus d’extensions tierces risquent de ne plus fonctionner pour eux. La raison en est que la valeur de retour par défaut Mage_Adminhtml_Controller_Action::_isAllowed()a été modifié par rapport trueà Mage::getSingleton('admin/session')->isAllowed('admin'). Les extensions qui ne remplacent pas cette méthode dans leurs contrôleurs d’administration parce qu’elles n’utilisent pas la liste de contrôle d’accès ont maintenant besoin du privilège "ALL" .

La seule solution consiste à patcher les extensions et à ajouter cette méthode à tous leurs contrôleurs d'administration:

protected function _isAllowed()
{
    return true;
}

Ou s’ils disposent d’une ressource ACL définie dans etc/adminhtml.xml:

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

Comment déterminer l'identifiant de la ressource

Voici à quoi adminhtml.xmlpourrait ressembler un:

Exemple Mage_Setup (acl)

Prenez les noms de nœud ci acl/resources/admin/children- dessous , en ignorant les childrennœuds suivants .

Comment créer des identifiants de ressources manquants

S'il y a seulement une <menu>définition mais pas de <acl>définition, vous pouvez aussi définir la vôtre (il n'est pas nécessaire qu'elle soit dans le même module, donc aucun fichier tiers ne doit être modifié):

Exemple Mage_Setup (menu)

Copiez tout ce qui suit menupour acl/resources/admin/childrensupprimer les <action>nœuds.


Correction automatique

Il existe un bon outil en ligne de commande de SupportDesk.nu à l' adresse https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd.

Il gère _isAllowed()très bien la plupart des appels manquants, mais entraîne la rupture du code avec des fichiers source obscurcis ou cryptés. Vous devez donc vérifier les résultats manuellement.


Vient de tester cette solution, et donner l’autorisation "Dashboard" ne fait aucune différence. Le "privilège Tableau de bord" est-il identique à la permission "Tableau de bord" sous Ressources de rôle ou est-ce ailleurs?
Chris

2
Mise à jour de la réponse, j’ai mal interprété la configuration admin, elle ne renvoie en réalité que vrai pour les utilisateurs avec tous les privilèges.
Fabian Schmengler

3
Ne le faites pas return true;si rien n’est défini pour ACL dans votre config.xmlou adminhtml.xml. Au lieu de cela, ajoutez les autorisations au fichier XML et vérifiez-le correctement. Jetez un coup d'oeil au site d'Alan Storm ou ici pour des informations sur la création d'autorisations.
kel

Cela fonctionne bien pour le module personnalisé, mais s'il y a une section pour le paramètre de configuration, comment pouvons-nous donner l'accès à ce bloc?
mjdevloper

1
Contrôleurs pour les itinéraires configurés <use>admin</use>. Ils s'étendent généralement Mage_Adminhtml_Controller_Action.
Fabian Schmengler

2

Dans mon cas pour les modules tiers, l'ajout du code ci-dessous aux contrôleurs adminhtml a fonctionné:

protected function _isAllowed()

{
     return true;
}

-5

CA devrait etre:

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

Dans ce cas, il renvoie les paramètres ACL de Magento. Je me demande simplement si Magento Core Team corrigera ce problème avec un autre correctif ou si cela devrait être fait dans app / code / local en tant que correctif global ...


3
Ce n'est pas le comportement prévu. Ils ont délibérément rendu les contrôleurs d’administration restrictifs. Donc, en réalité, les fournisseurs d’extensions sont obligés de mettre à jour maintenant.
Fabian Schmengler

1
Donc, oui, si cela fonctionne pour vous, corrigez-le app/code/local, mais affichez des extensions personnalisées sans ACL si et seulement si l'utilisateur dispose d'autorisations pour System > Configurationce que tout le monde voudrait.
Fabian Schmengler

Votre solution est une solution de contournement et n'est pas recommandée! Vous pouvez renvoyer true par défaut (comme c'était le cas dans le contrôleur d'administration avant ce correctif). La meilleure solution: configurez correctement vos listes de contrôle d'accès.
Matthias Kleine
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.