Je souhaite pouvoir accéder à des propriétés personnalisées pour un utilisateur authentifié tel que UserId et FirstName sans interroger la base de données à chaque fois. J'ai trouvé this site à travers un post sur Stack Overflow et j'aime l'approche - mais j'utilise IoC/repositories et ai décidé de ne pas essayer et obtenir global.asax pour communiquer avec la base de données de peur qu'elle serait incompatible avec le modèle de dépôt. Au lieu de cela, j'ai créé une interface pour CustomPrincipal et j'utilise IoC (Castle) pour créer une instance et la transmettre aux contrôleurs (et par la suite à mon contrôleur de base).Principal personnalisé dans ASP.NET MVC
Le contrôleur de base utilise des méthodes que j'ai créées dans CustomPrincipal pour réaliser la même tâche que l'auteur du blog a traitée dans global.asax. À savoir, CustomPrincipal est initialisé à partir de la base de données ou du cache et affecté à HttpContext.Current.User.
Mes contrôleurs/vues peuvent ensuite référencer les propriétés comme suit ...
((ICustomPrincipal)(HttpContext.Current.User)).FirstName;
Il fonctionne, mais je sens une odeur de code. Tout d'abord, si je référence HttpContext des contrôleurs, j'ai tué mes tests unitaires. Je pense à modifier mon objet CustomPrincipal pour retourner la valeur ci-dessus (de sorte que je puisse la mocker dans mes tests unitaires) mais je me demande si c'est une solution de contournement par opposition à une bonne solution.
Est-ce que je vais dans ce sens? Y at-il des ajustements mineurs que je pourrais faire pour en faire une solution robuste ou devrais-je commencer à partir de zéro avec FormsAuthenticationTicket ou quelque chose à cet effet?
Merci!
Cela semble être une bonne idée - je vais jouer avec ça pour voir si je peux le faire fonctionner. Merci! – Mayo
Pas de problème. Faites-moi savoir si vous rencontrez des problèmes. – StriplingWarrior