2016-12-14 1 views
0

Je construis un système web d'une seule page en utilisant Angular comme frontal et Java (Spring-Boot) comme backend. Ce système a des rôles différents et l'utilisateur doit être affecté à un rôle. Un rôle différent peut faire différentes opérations. Disons que pour rester simple: il y a 2 rôles dans System: Super User et Admin. La seule caractéristique de ce système est Product, qui a 3 propriétés: name, retail_price, factory_price. Super utilisateur peut ajouter un produit et mettre à jour ces propriétés. L'administrateur peut voir le nom et le prix de détail mais Admin ne peut pas voir le prix de l'usine. Admin peut également mettre à jour le prix de détail mais ne peut pas ajouter le produit.système de conception avec l'interface utilisateur contrôlée par serveur en Angular (Front-end) + Java (Back-end)

Afin de mettre en œuvre ce contrôle de fonctionnalité dans Angular, en ce moment, je suis le codage en dur du code en HTML. Lorsque vous affichez la page Produits, le bouton Ajouter s'affiche si l'utilisateur de connexion appartient à Super utilisateur. Lors de l'affichage de la page Détails du produit, factory_price sera masqué et le champ de nom sera en lecture seule si l'utilisateur connecté appartient à Admin.

De toute évidence, ce n'est pas une bonne façon de le faire parce que tout ce code de contrôle est en HTML, tout le monde peut le lire et connaître notre logique. Je suis à la recherche d'une solution et des conseils qui peuvent gérer cette logique côté serveur et le serveur retourne juste ce que le navigateur a besoin de montrer et le frontal (Angular) montre juste le contenu du serveur et se débarrasse de toutes ces logiques de contrôle.

Un autre défi consiste à gérer différents HTML pour différents rôles. Par exemple, pour la page de détail du produit, je souhaite préparer le contenu HTML pour différents rôles côté serveur et une fois que l'utilisateur se connecte à la page de détails du produit, il envoie un appel reposant et récupère le contenu HTML du backend. Ensuite, le client n'a pas besoin d'avoir de logique et de le montrer. Dois-je utiliser un modèle HTML différent pour un rôle différent?

Répondre

0

Le protocole que vous utilisez est HTTP, qui est sans état. Il n'est pas mentionné quelle technologie Java (Spring, JSP Servlet) vous utilisez pour votre backend. Si vous avez des utilisateurs différents et qu'ils ont des autorités ou des rôles différents, vous devez conserver une session associée à l'arrière-plan. Lorsque vous pouvez obtenir l'utilisateur connecté, vous pouvez extraire les rôles de cet utilisateur. Sur ces attributs, vous pouvez interroger la base de données et fournir des données à la fin du client.

+0

Je peux obtenir un rôle pour l'utilisateur de connexion à partir de la session de connexion. En fait, le défi est de savoir comment concevoir le système après avoir obtenu l'information sur le rôle. J'utilise angular dans le côté client et je veux me débarrasser de toute logique de contrôle du côté client. Le côté serveur est donc supposé préparer tout le contenu HTML et l'envoyer au client. Le client a juste besoin de montrer le contenu. Il semble que j'ai besoin de préparer du contenu HTML dans le backend et d'utiliser un modèle différent pour un rôle différent, puis de retourner au client. – lorcel

+0

Lorsque vous utilisez angular, vous devez définir des modèles de vue sur les scripts de fin du client. Dans votre scénario, vous avez besoin d'une manipulation html côté serveur effectuée via la technologie JSP. Mais lors de la conception avec un client API REST, la gestion de la logique peut devenir faible. Je vous suggère de tirer des objets JSON à partir du serveur et en fonction des paramètres de ces objets, vous pouvez sélectionner des modèles dans le côté client. –

+0

Pour moi puisque l'Angular 2 est plus à OOP, je pense qu'il est le meilleur pour concevoir des API REST. –