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 DbSets 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.

Était-ce utile?

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.

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