Question

J'ai 3 niveaux (UI, BLL, DAL), ces BLL et Dal résident sur WS externe, évidemment mon utilisateur d'adhésion fonctionne sur le niveau d'interface utilisateur.

Alors ... j'essayais de stocker dans mes tables de bus le nom d'utilisateur pour les tâches différentes (comme un crud)

  • Insérer le registre (nom d'utilisateur: Nicolas)
  • Supprimer le registre (nom d'utilisateur: Peter) etc ...

Le moyen le plus simple consiste à envoyer le nom d'utilisateur sur toutes les méthodes et à stocker dans les différentes tables. Mais cette idée n'est pas évolutive et très sale si vous avez beaucoup de tables de bussines.

Avez-vous une autre façon de le faire? J'ai lu sur l'écriture d'un fournisseur d'adhésion personnalisé pour stocker l'utilisateur différent sur Cache et en retirer. Mais je ne sais pas si c'est la meilleure solution de contournement.

Des idées?

Était-ce utile?

La solution

Les contrôles personnalisés pour ASP.NET reposent sur la bibliothèque d'adhésion dans System.Web (plus précisément, System.Web.Security). Tant que vous utilisez ces contrôles (par exemple, le <asp:Login> Contrôle) Vous avez déjà une dépendance à System.Web. Dans ce cas, toute couche de votre application peut faire quelque chose comme celle-ci pour récupérer l'utilisateur actuel:

using System.Web.Security;
...
MembershipUser user = Membership.GetUser();

Puis utiliser user.UserName Pour récupérer le nom d'utilisateur de l'utilisateur.


Mis à jour pour refléter la compréhension que les couches sont hébergées sur des serveurs séparés.

J'ajouterais une méthode startcession () au BLL qui prend le nom d'utilisateur en tant que paramètre et renvoie un ID de session de chaîne. Le BLL sur le serveur génère l'ID de session (peut-être en utilisant un GUID) et utilise le cache BLL-Side pour enregistrer le nom d'utilisateur. Ensuite, du côté client, définissez un cookie qui contient l'ID de session. Il sera soumis avec la demande Web. (Selon la façon dont vous soumettez la demande Web, vous devrez peut-être définir la valeur des cookies avec JavaScript.)

De cette façon, vous n'avez pas à modifier la signature de vos méthodes, mais vous pouvez toujours obtenir le nom d'utilisateur du BLL en utilisant le cache. Vous devrez vous assurer que votre page de connexion appelle la méthode getSession () et définit le cookie de session avant de soumettre plus de demandes.

Autres conseils

À moins que vous n'utilisiez des services dans le BLL et la DLL, alors quel est le point, il n'y a pas accès à ceux-ci, sauf via l'interface utilisateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top