Jump to content

Problème Partage Données Entre Multi Boutiques


florent33

Recommended Posts

Bonjour à tous,

 

Lorsque l'on active le multi boutiques sur prestashop, chaque boutique dispose de ses propres données. Par exemple, les clients d'une boutique x ne sont pas visibles par une boutique y. De même pour les commandes, les factures ...

Bien que ces données ne soient pas directement visibles par la boutique y, je me suis rendu compte d'un bug permettant d'y accéder et de les modifier.

Pour y parvenir, il suffit tout simplement de modifier l'url ...

Par exemple pour voir la commande numéro 1 appartenant à la boutique x à partir du BO de la boutique y il suffit de modifier l'url comme ceci :

index.php?controller=AdminOrders&id_order=1&vieworder&token=

 

De même pour accéder à un client d'id 1 appartenant à la boutique x à partir du BO de la boutique y :

index.php?controller=AdminCustomers&id_customer=1&viewcustomer&token=

 

Idem pour les adresses clients :

index.php?controller=AdminAddresses&id_address=1&updateaddress&token=

 

J'ai pensé à placer ce bout de code dans la fonction renderForm de chaque controllers :

(exemple pour le controller des adresses)

$idShopAddress = Db::getInstance()->getValue('
  SELECT id_shop
  FROM `'._DB_PREFIX_.'address` a
  JOIN `'._DB_PREFIX_.'customer` c on c.id_customer = a.id_customer
  WHERE id_address='.(int)Tools::getValue('id_address')
 );
 if  ((int)$idShopAddress != (int)Shop::getContextShopID())
  die();

 

Le problème c'est que cela limite seulement l'affichage... On peut encore interagir avec les données en modifiant de nouveau l'url. Par exemple pour supprimer l'adresse du client d'id 1 de la boutique x à partir du BO de la boutique y il suffit de saisir :

 

index.php?controller=AdminAddresses&id_address=1&deleteaddress&token=

 

Je ne crois pas que ce soit une solution de placer mon bout de code dans toutes les fonctions.

J'ai levé un bug sur le bug tracker de prestashop en espérant qu'il soit pris en considération : PSCFV-8002

 

En attendant, si quelqu'un a une solution, je suis preneur :)

 

Merci d'avance pour votre aide.

Edited by florent33 (see edit history)
Link to comment
Share on other sites

Interessant !

 

Tu as testé toutefois si la chose était possible en n'étant pas superadmin ? Ca vaudrait quand même le coup de vérifier en changeant de profil parce qu'en mode superadmin, ça me parait pas réellement être un bug, ni une faille de sécurité.

Si seul le super admin peut interagir en changeant les données get ça n'est pas vraiment problématique...

 

Mais il pourrait aussi être logique de devoir spécifier l'id shop pour les manipulations de ce type j'en conviens.

Link to comment
Share on other sites

Interessant !

 

Tu as testé toutefois si la chose était possible en n'étant pas superadmin ? Ca vaudrait quand même le coup de vérifier en changeant de profil parce qu'en mode superadmin, ça me parait pas réellement être un bug, ni une faille de sécurité.

Si seul le super admin peut interagir en changeant les données get ça n'est pas vraiment problématique...

 

Mais il pourrait aussi être logique de devoir spécifier l'id shop pour les manipulations de ce type j'en conviens.

 

Oui j'ai testé avec un profil différent du superadmin

Link to comment
Share on other sites

Je viens de penser ... Il serait sans doute pas mal de créer une fonction verifyAccess dans tous les controllers admin (ex: AdminAddressesController.php) contenant mon bout de code cité plus haut :

 

$idShopAddress = Db::getInstance()->getValue('
  SELECT id_shop
  FROM `'._DB_PREFIX_.'address` a
  JOIN `'._DB_PREFIX_.'customer` c on c.id_customer = a.id_customer
  WHERE id_address='.(int)Tools::getValue('id_address')
 );
 if  ((int)$idShopAddress != (int)Shop::getContextShopID())
  die();

 

et appeler cette méthode à partir de AdminController.php dans les fonctions : processDelete(), processSave(), processAdd(), processUpdate() ...

 

A TESTER

Link to comment
Share on other sites

Toujours à propos du partage de données mais sans modification de l'url ... Tous les retours produits, les bons de livraison et les avoirs sont visibles par toutes les boutiques. Il serait intéressant là aussi que les boutiques aient accès qu'à leurs propres données comme c'est déjà fait pour les factures par exemple.

Dans le SAV, seuls les mails envoyés aux adresses inscrites dans la section "Clients > Contacts" de la boutique devraient apparaitre.

Un employé ne devrait pas pouvoir créer des règles panier pour d'autres boutiques mais seulement pour la sienne.

Et pour finir, lors de la création d'une boutique, on a la possibilité de copier les transporteurs... En faisant ce choix, les transporteurs sont bien copiés mais les associations entre les produits et les transporteurs ne sont pas gardées.

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

 

Entièrement d'accord avec toi Florian.

D'ailleurs, les clients ne sont en effet pas partagés entre les multi-boutiques sauf a un endroit :

dans Clients > Groupes > Clients > Voir

 

J'espère vraiment que Prestashop va réellement dissocier les données des multi-boutiques lors de la prochaine version car cela pose pas mal de problèmes.

 

En attendant que Prestashop trouve une solution est-ce que l'un d'entre vous aurait une astuce pour que les règles panier d'un shop ne soient pas visibles par les employés d'un autre shop ?

Edited by bdj (see edit history)
Link to comment
Share on other sites

Hello Florian,

 

En effet, je n'ai pas l'impression (à la vue du changelog) que ce problème ai été corrigé. Pourtant je considère ce problème comme étant relativement important...

 

@+

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...
  • 2 weeks later...
  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...