2016-03-23 3 views
0

Wir haben ein Setup, bei dem Clients eine eigenständige Version unseres Systems ausführen, die jedoch alle mit derselben Identity Database mit Entity Framework verbunden sind.ASP.Net Idenity - FindByName überschreiben, um zusätzliche Suchkriterien einzubeziehen

Ein Benutzer kann als Benutzer in vielen Versionen der Anwendung registriert werden, wodurch mehrere Konten mit demselben Benutzernamen vorhanden sind, aber die Anwendungs-ID (in der Datei web.config gespeichert) ist eindeutig.

Was ich tun möchte, ist die UserManager.FindByName -Funktion, aber haben Sie automatisch die "& & applicationId = X" zu der Anfrage an den Kontext gesendet.

Antwort

0

Nun, Sie können von der UserManager-Klasse erben, aber Sie müssen den ursprünglichen Code neu schreiben (.NET ist jetzt Open Source, Sie können den ursprünglichen Code finden) und fügen Sie Ihre Logik hinzu. Dies kann jedoch eine langwierige Maßnahme sein.

Ich schlage vor, wenn Sie Entity Framework für die Benutzer-ID nach Name und Anwendungs-ID suchen, dann übergeben Sie die ID für die FindById-Methode.

0

Wenn die Umsetzung nach unten folgen, werden Sie schließlich diese Methode finden:

public virtual Task<TUser> FindByIdAsync(TKey userId) 
{ 
    this.ThrowIfDisposed(); 
    return this.GetUserAggregateAsync((Expression<Func<TUser, bool>>) (u => u.Id.Equals(userId))); 
} 

Um dies richtig außer Kraft zu setzen, es würde in der UserStore Klasse sein, da viele interne Verfahren gibt es (andernfalls müssten Sie jede einzelne interne Methode in der Klasse neu schreiben) und einen neuen Typparameter hinzufügen, der Ihre ApplicationId akzeptiert, da UserStore eine generische Klasse ist. Dann könnten Sie eine andere FindByIdAsync-Methode schreiben, weil es eine virtuelle Methode ist und nicht überschrieben werden kann. Sie müssten auch die interne Methode GetUserAggregateAsync neu schreiben, da sie nicht bereit ist, Ihren neuen Typparameter zu verarbeiten.

Nun, es gibt wahrscheinlich ein paar Schluckauf, die sich zeigen würden, aber Sie können diese Methode letztendlich zu Ihnen umschreiben, aber ich würde davon abraten, weil es eine Menge Arbeit ist, etwas zu erreichen, was möglich sein könnte auf eine andere Art.

Docs: http://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNet/Identity/EntityFramework/UserStore-TUser-TRole-TContext-TKey/index.html

Code: https://github.com/aspnet/identity/blob/master/src/Microsoft.AspNet.Identity.EntityFramework/UserStore.cs

Verwandte Themen