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.
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?
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:
protectedfunction _isAllowed(){returntrue;}
Ou s’ils disposent d’une ressource ACL définie dans etc/adminhtml.xml:
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é):
Copiez tout ce qui suit menupour acl/resources/admin/childrensupprimer les <action>nœuds.
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é:
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 ...
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.
admin
, elle ne renvoie en réalité que vrai pour les utilisateurs avec tous les privilèges.return true;
si rien n’est défini pour ACL dans votreconfig.xml
ouadminhtml.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.<use>admin</use>
. Ils s'étendent généralementMage_Adminhtml_Controller_Action
.Dans mon cas pour les modules tiers, l'ajout du code ci-dessous aux contrôleurs adminhtml a fonctionné:
la source
CA devrait etre:
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 ...
la source
app/code/local
, mais affichez des extensions personnalisées sans ACL si et seulement si l'utilisateur dispose d'autorisations pourSystem > Configuration
ce que tout le monde voudrait.