Sto usando ASP.NET Identity con un nuovo sito Web e non sembrano esserci molti (nessuno?) Esempi su come farlo in modo disaccoppiato. Non voglio che la classe DomainUser
del mio modello di dominio DomainUser
ereditare da Microsoft.AspNet.Identity.EntityFramework.User
, quindi ho creato una classe simile a questa:
public class IdentityUser : User
{
public virtual DomainUser DomainUser { get; private set; }
}
Ho spostato i DbSet
richiesti da ASP.NET Identity nella stessa classe derivata DbContext
miei modelli di dominio come illustrato in questa risposta . Ho collegato IdentityUser
unidirezionalmente a DomainUser
tramite Fluent API in questo modo:
modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();
Ciò mi consente di separare principalmente le preoccupazioni dell'autorizzazione e dell'autenticazione dai comportamenti definiti nella classe DomainUser
. È meglio che combinarli in un'unica classe, ma è comunque brutto. Ho ancora riferimenti agli assembly di identità ASP.NET richiesti nel mio progetto di dominio. Potrei creare ancora un altro progetto che contenesse solo la mia classe IdentityUser e un riferimento al mio gruppo Dominio per consentire la proprietà di navigazione, ma che inizia a sentirsi contorto.
Mi sembra che ci dovrebbe essere un modo migliore, più pulito e più modulare per collegare Identity al dominio senza che ciò si traduca in un accoppiamento stretto.
Qualcuno ha trovato un modo migliore di gestirlo? Spero di attirare l'attenzione di coloro che sono coinvolti nel progetto Identità ASP.NET ( Hao Kung et al) per fornire indicazioni qui.
Il fatto è che se si erediterà da IdentityUser, gli assembly relativi all'identità di ASP.NET stanno arrivando per la corsa. Non è possibile separare Identity da ASP.NET. Gli esempi originali nella domanda non ti comprano molto - nella maggior parte dei casi probabilmente stai meglio ereditando da IdentityUser
se stai per utilizzare IdentityUser
nel tuo progetto di dominio.
Se il tuo progetto di dominio ha veramente bisogno di essere privo di assembly correlati a ASP.NET, puoi lasciare le classi relative all'Idea nel tuo progetto web e creare un modello User
separato nel tuo progetto di dominio. Un collegamento tra i due, come suggerito qui .
C'è una discussione sul disaccoppiamento dell'identità ASP.NET qui . E puoi trovare esempi su come è implementato nel progetto open source SimpleSecurity .