Rôle de l'utilisateur ne fonctionne pas comme prévu
-
16-10-2019 - |
Question
Création d'un rôle d'utilisateur d'accéder uniquement l'action VIEW sur ordre de vente, ne nie pas l'utilisateur de modifier l'adresse de facturation et de livraison dans la page d'information de commande.
Est-il possible de le réparer?
La solution
-
Créez votre propre contrôleur remplaçant
Mage_Adminhtml_Sales_OrderController
. -
Dans votre contrôleur, créez une méthode
_isAllowed
:/** * Acl check for admin * * @return bool */ protected function _isAllowed() { $action = strtolower($this->getRequest()->getActionName()); $aclResource = null; switch ($action) { case 'addressSave': case 'address': $aclResource = 'sales/order/actions/address'; break; } if ($aclResource !== null) { return Mage::getSingleton('admin/session')->isAllowed($aclResource); } return parent::_isAllowed(); }
-
Dans votre
adminhtml.xml
, ajoutez ceci:<config> <acl> <resources> <admin> <children> <sales> <children> <order> <children> <actions> <children> <address translate="title"><title>Edit Address</title></address> </children> </actions> </children> </order> </children> </sales> </children> </admin> </resources> </acl> <config>
Maintenant, vous pouvez activer et désactiver l'écran de modification d'adresse pour les utilisateurs.
-
Si vous souhaitez masquer le lien de ces utilisateurs, vous pouvez copier
app/design/adminhtml/default/default/template/sales/order/view/info.phtml
sur votre thème admin personnalisé et remplacer<div class="tools"><?php echo $this->getAddressEditLink($_order->getBillingAddress())?></div>
avec quelque chose comme ceci:
<?php if (Mage::getSingleton('admin/session')->isAllowed('sales/order/actions/address')): ?> <div class="tools"><?php echo $this->getAddressEditLink($_order->getBillingAddress())?></div> <?php endif; ?>
et faire la même chose pour l'adresse de livraison. Idéalement, vous mettez l'appel au singleton dans votre propre classe de bloc, mais je placer le code dans le fichier de modèle pour un souci de concision.