2017-05-05 6 views
0

Ich möchte Benutzerklasse in Orchard Core (Orchard 2) erweitern, fügen Sie einige zusätzliche Eigenschaften wie FirstName, Nachname zum Beispiel. Ich verstehe, dass ich solche Informationen in einer separaten Entität wie UserProfile speichern kann, aber manchmal wäre es einfach, meine eigene Implementierung von IUser zu verwenden. Es sieht so aus, als ob die OrchardCore-Implementierung des "Membership-Systems" an den Orchard.Users.Models.User-Typ gekoppelt ist. Ich sehe es ein DienstASP.NET Core Identity-Implementierung in Orchard Core

IUserService.CreateUserAsync (Benutzer Benutzer, ...

Wahrscheinlich wäre es besser, IUser Schnittstelle statt Orchard.Users.Models.User Typ zu benutzen? habe ich versucht, von Orchard.Users.Models.User Klasse zu erben wie

class MyUser : Orchard.Users.Models.User 
{ 
    .. 
} 

Aber wenn ichIUserService.CreateUserAsync (myUser) aufzurufen versucht, bekam ich einen Fehler

`Unable to cast object of type 'YesSql.Indexes.DescribeContext`1[MyTestModule.Abstractions.Models.MyUser]' to type 'YesSql.Indexes.DescribeContext`1[Orchard.Users.Models.User]'.` 

Da Orchard Core Dokumentspeicher DB verwenden, warum kann ich nicht einfach meine eigene Implementierung von IUser erstellen und verwenden? Wird es in Zukunft behoben werden? können für den Moment einige Problemumgehungen sein?

Antwort

0

Beantworten Sie meine Frage, wahrscheinlich wird es für jemanden nützlich sein. Die Benutzererweiterbarkeit wurde im Zweig "Benutzer" implementiert, der jetzt mit dem Master verknüpft ist.

Es gibt mehrere Lösungen

  1. Jetzt Orchard.User implementiert IEntity, können Sie benutzerdefinierte Eigenschaften Treiber verwenden, genau die gleiche Art und Weise hinzufügen, wie es für die Site-Einstellungen durchgeführt wurde.

  2. Sie können versuchen, direkt von Orchard.Users.User zu erben, aber ich bin mir nicht sicher, es wird wegen Yes Sql funktionieren, wie ich mich erinnere, Ja Sql nicht abrufen und speichern abgeleitete Modelle, wahrscheinlich war es behoben, muss überprüft werden

  3. Wenn die oben genannten Lösungen nicht Ihren Anforderungen entsprechen, können Sie z. B. ein anderes ORM wie EF verwenden. Ich befürchte, dass Sie die IUser-Schnittstelle implementieren müssen. In diesem Fall müssen Sie ASP.NET-Identity-Stores und Services überschreiben (IUserStore, IUserService ..) + wahrscheinlich müssen Sie die Benutzer- und Rollen-Benutzeroberfläche des Admin-Tools außer Kraft setzen auf der Standard-Benutzer-Implementierung von Orchard. Sie müssen Orchard.OpenId nicht überschreiben, da es auf der IUser-Schnittstelle beruht, ABER! Falls Sie Ihre eigenen "Autorisierungsansprüche" ausstellen müssen, müssen Sie möglicherweise den OpenId-Controller

übersteuern