2017-09-28 5 views
0

Imaginons que j'ai trois boutons dans ma page html. Le premier bouton sert à sélectionner une voiture, le second à louer cette voiture et le bouton suivant à payer le loyer. Tous les trois boutons font une requête ajax pour faire une logique métier dans le serveur. Lorsque l'utilisateur appuie sur le premier bouton et que la requête ajax est correcte, j'activerai le second bouton et désactiverai le premier bouton et le même pour le deuxième et le troisième. Par défaut, tous les boutons sont désactivés. Cette activation ou désactivation est en javascript si les requêtes ajax sont correctes. Je pense que l'activation ou la désactivation des boutons ou des permissions est une logique métier et devrait être présente non pas dans la vue mais dans le serveur. Je veux dire, ne serait pas mieux de faire une requête ajax pour obtenir les autorisations de l'utilisateur en fonction des opérations qu'il a déjà effectuées?Logique de présentation ou logique métier?

Merci beaucoup

Répondre

1

Il y a deux réponses que j'ai:

  • Il est tout à fait raisonnable d'avoir une demande de paiement ajax pour obtenir les transitions d'état disponibles. Vous parlez de cela comme s'il s'agissait de permissions, mais ce n'est pas vraiment vrai. Les autorisations sont des états qui diffèrent entre les utilisateurs en fonction de ce que cet utilisateur est autorisé à faire. C'est ce que les opérations sont valables étant donné un état particulier basé sur des règles métier, ce qui est une bonne chose d'avoir une requête à obtenir. Cela dit, au moment où vous utilisez AJAX, il est courant d'avoir un modèle MVC sur le client ainsi que sur le serveur. C'est-à-dire que vous avez une vue et une logique de contrôleur dans votre page HTML en plus de la logique de vue. Cette logique implémente certaines règles métier. Angular et d'autres cadres côté client rendent les modèles comme celui-ci explicite. Dans une telle application, la couche vue du serveur est mince. Il est toujours important de s'assurer que les règles métier importantes sont appliquées sur votre serveur afin qu'un attaquant ne puisse pas subvertir ces règles sur le client. Dans une telle application, il serait tout à fait raisonnable d'avoir des boutons activés côté client tant que le serveur s'assurait que vous n'aviez pas loué ou payé une voiture sans la sélectionner.

1

Si vous voulez que votre code côté serveur pour décider si vous souhaitez afficher le bouton suivant, vous pouvez faire quelque chose comme ceci:

$.get("/api/yourController/yourMethod") 
    .success(function (response) { 
     if (response == true){ //change this for your unique decision logic 
      // execute show button code 
     } 
    }); 

Sur la base des données que vous revenez de votre serveur Dans l'objet response, vous pouvez contrôler si votre bouton suivant apparaît dans votre code HTML.