Wie implementiere ich benutzerdefinierte Principal-und Identity-in ASP.NET MVC?
Ich möchte zusätzliche Informationen zu speichern, die in den authentifizierten Benutzer, so kann ich es leicht zugänglich (wie Benutzer.Identität.Id, zum Beispiel), anstatt nur die Namen, denn ich bin der Planung auf das nicht-eindeutige.
So weit ich das gerafft habe, dass ich Aussehen sollte, um implementieren Sie benutzerdefinierte Principal-und/oder Identität, aber ich bin mir nicht sicher wie Sie gehen über es. Ich habe auf der Suche nach Dokumentationen und tutorials über die Materie, aber ich habe festgestellt, bezogene Sachen in verschiedenen Orten, und ich fand es ein bisschen verwirrend.
Habe ich gesehen, wie das hinzufügen von benutzerdefinierten info für die Authentifizierung cookie im user-data-Eigenschaft, aber ich würde gerne den Vorteil von dependency injection, unit-Tests, die ich mit der principal-und identity.
Was sind die genaue Schritte, die ich beachten muss wenn ich das umsetzen will, mein eigener AUFTRAGGEBER oder Identität?
Was wäre die einfachste, die ich tun könnte in diesem Szenario (fügen Sie einfach die ID und halten Sie die Standardeinstellungen im Ort)? "Defaults" die Standard-Anbieter (Mitgliedschaften, Rollen, etc.).
Habe ich gesehen,andere Frageaber ich würde mich über Antworten freuen, lassen Sie keine Löcher in zwischen, wie die Rollen magic strings in dem AuthenticateRequest-Ereignis in den Beispielen. Stattdessen muss ich wissen, wie Sie die Rollen aus dem Standard-SqlRoleProvider für den aktuellen Benutzer: Wann und wo es zu tun, und wenn ich brauche nichts weiter zu tun, eine Verbindung zu meinem neuen Klassen mit den anderen Mobilfunk-Anbieter.
Es wäre großartig, in der Lage zu gehen, um eine Probe ASP.NET MVC 2 Anwendung (aus der visual studio-2010-Vorlage, zum Beispiel), nehmen Sie die änderungen vor und haben es zu arbeiten.
EDIT: ich bearbeitet haben, die Frage besser zu zeigen, dass ich ziemlich viel verloren hier, also kann ich nicht nicht mit zu hohen Niveau Antworten.
P. S.: Es scheint mir, dass es mehr Sinn macht, haben die ID in der Identität statt der Hauptperson, ich habe zwar, in einer Weise, erklärte, dass dieser vor.
InformationsquelleAutor der Frage Kenji Kina | 2010-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage wurde gestellt und beantwortet vor:
ASP.NET MVC - Set custom IIdentity oder IPrincipal
Aber zusammengefasst...
Kiste eine benutzerdefinierte principal-Klasse mit zusätzlichen Eigenschaften, die Sie speichern möchten:
Ändern global.asax Globale.Application_AuthenticateRequest zur Verwendung Ihrer benutzerdefinierten AUFTRAGGEBER:
Dann an anderer Stelle in Ihrem code, wenn Sie wollen, beziehen sich auf eine dieser Eigenschaften zu tun:
InformationsquelleAutor der Antwort Seth Reno
Kann man nicht wirklich erwarten, dass jemand dir alles beibringen, was Sie nicht kennen .NET in ein paar Absätze. Sie können Lesen ziemlich gutes Beispiel bei MSDN http://msdn.microsoft.com/en-us/library/system.security.principal.genericprincipal.aspx und Graben, durch die Klasse und deren Derivate im Reflektor - gibt es nichts spektakulär besonderes.
Rollen sind nur ein string-arrray von Namen für Ihren eigenen Gebrauch, in Ihre app/server.
Gesagt, dass Sie nicht wirklich haben, um zu Zielen auf die genaue GenericPrincipal-derrivative überhaupt. Check-out
Es ist eine Hashtable für die Kostenlose Nutzung nur für die Anfrage, die Sie bedienen - was bedeutet, dass an einer Stelle, die Sie tun können, sagen:
dann everythere sonst in den code nur:
und Sie sind fertig.
Store in Ihrer neuen Klasse alles, was Sie brauchen/wollen zu passieren, um von der Authentifizierung code, um alle anderen Funktionen. Blätter-Benutzer-Eigenschaft erhalten (so können Sie einen Blick in Sie, und Sie müssen nicht sorgen zu machen, dass Sie etwas verändert). Wihr, Sie vereinfachen oder erschweren, Ihr system zu werden, aber Sie behalten die volle Unabhängigkeit.
Zum Beispiel, wenn Sie Ihre eigene Authentifizierung und nur ein paar Ebenen von acces statt aufgezählten Rollen, Sie können nur tragen die guten alten access level-Nummer (aufgezählt von Rollen getragen, um als Zeichenfolgen sind sehr ineffizient sowieso).
Beachten Sie, dass autogenned Proben in VS sind in der Regel darauf ausgerichtet, bestimmte Szenario. Also, wenn Sie sehen SQL-Anbieter für user-management, dass heißt nicht, dass Sie tatsächlich haben, um es zu verwenden, können Sie nur noch an Ihren eigenen sproc zu erhalten, was Sie benötigen, aus Ihrem eigenen Tabelle in SQL.
InformationsquelleAutor der Antwort ZXX