Meilleures pratiques pour l’intégration d’ASP.NET Identity : existent-elles ?
-
20-12-2019 - |
Question
J'utilise ASP.NET Identity avec un nouveau site Web et il ne semble pas y avoir beaucoup (aucun ?) d'exemples sur la façon de procéder de manière découplée.Je ne veux pas de mon modèle de domaine DomainUser
classe dont il faut hériter Microsoft.AspNet.Identity.EntityFramework.User
, j'ai donc créé une classe qui ressemble à ceci :
public class IdentityUser : User
{
public virtual DomainUser DomainUser { get; private set; }
}
J'ai déplacé le DbSet
s requis par l'identité ASP.NET dans le même dérivé DbContext
classe comme mes modèles de domaine comme illustré dans cette réponse.J'ai lié le IdentityUser
unidirectionnellement vers le DomainUser
via l'API Fluent comme ceci :
modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();
Cela me permet de séparer principalement les préoccupations d'autorisation et d'authentification des comportements définis dans le DomainUser
classe.C'est mieux que de les combiner en une seule classe, mais cela semble quand même moche.J'ai toujours des références aux assemblys d'identité ASP.NET requis dans mon projet de domaine.Je pourrais créer encore un autre projet contenant uniquement ma classe IdentityUser et une référence à mon assembly Domain pour autoriser la propriété de navigation, mais cela commence à sembler compliqué.
J'ai l'impression qu'il devrait y avoir un moyen meilleur, plus propre et plus modulaire de relier l'identité au domaine sans que cela n'entraîne un couplage étroit.
Quelqu'un a-t-il trouvé une meilleure façon de gérer cela ?J'espère attirer l'attention des personnes impliquées dans le projet ASP.NET Identity (Hao Kung et al) pour fournir des orientations ici.
La solution 2
Le fait est que si vous souhaitez hériter d'IdentityUser, les assemblys liés à l'identité ASP.NET vous accompagnent.Vous ne pouvez pas séparer l'identité d'ASP.NET.Les exemples originaux de la question ne vous rapportent pas grand-chose - dans la plupart des cas, il vaut probablement mieux simplement hériter de IdentityUser
si vous comptez utiliser IdentityUser
dans votre projet de domaine.
Si votre projet de domaine doit vraiment être exempt d'assemblys liés à ASP.NET, vous pouvez laisser les classes liées à l'identité dans votre projet Web et créer une classe distincte. User
modélisez dans votre projet de domaine et liez les deux par programme, comme suggéré ici.
Autres conseils
Il y a un discussion sur le découplage de l'identité ASP.NET ici.Et vous pouvez trouver des exemples sur la façon dont il est mis en œuvre dans le projet open source SimpleSecurity.