Ich baue eine asp.net mvc Web-API-Anwendung und nicht sicher, wie man die Mitgliedschaft Sachen zu tun.Rollenanbieter/Mitgliedschaft? Wie in asp.net Web API?
In meinem aktuellen Projekt habe ich dieses
Meine eigene Users Table
und Role Table
ich nicht asp.net Mitgliedschaft verwende, da es zu viel Gepäck bringt und passt nicht, wie ich meine Datenbank entwerfen möchten (sicher ich kann es aber es scheint, wie zu viel Arbeit)
A user
kann viele Rollen haben und ein role
viele Benutzer haben.
Ich verwende EF, um fast alle meine Anrufe in die Datenbank zu tun.
In früheren Projekten habe ich meine eigene Authorize Attribute
gemacht, was mein eigener Aufruf zu meiner Datenbank und überprüft hat, ob der Benutzer in der richtigen Rolle war, als was auf dieser Controller/Aktionsmethode erlaubt war.
Indem ich keine Mitgliedschaftsanbieter machte, verlor ich einige der eingebauten Funktionen wie User.IsInRole
. Ich konnte immer noch User.Identity.Name
verwenden, aber ich denke, das war wegen dem Cookie, den ich gesetzt habe.
Was ist der beste Weg, es jetzt in asp.net mvc 4/web api zu tun?
Beim googeln habe ich "SimpleMembership" gefunden, habe aber noch nicht viel gelesen.
Auf einer Seitennotiz kann ich User.Identity.Name
mit meinem Webapi verwenden, wenn ich einen Benutzer authentifizierte?
Wie wäre es mit User.Identity.Name wie wird das in asp.net Webapi gesetzt? In einer früheren mvc 3-Anwendung hatte ich in meinem benutzerdefinierten Autorisierungsattribut dies: httpContext.User.Identity.Name und dann verwendete ich meine eigene Service-Schicht mit diesem Namen, um herauszufinden, welche Berechtigungen der Benutzer hatte. Kann ich httpContext.User.Identity.Name verwenden, da ich dachte, dass das durch den Cookie gesetzt wurde? – chobo2
Ja, Sie können ein benutzerdefiniertes Attribut authore haben und den 'Thread.CurrentPrincipal' auf den entsprechenden Benutzer setzen. Sehen Sie sich eine Beispielimplementierung an, die ich geschrieben habe und die einen Mitgliedschaftsanbieter mit Standardauthentifizierung verwendet: http://Stackoverflow.com/a/11536349/29407 In diesem Beispiel habe ich einen benutzerdefinierten delegierenden Handler verwendet, aber Sie könnten einen Autorisierungsfilter verwenden, wenn Sie will auch. –
Cool das ist sehr hilfreich. Habe ein paar Fragen obwohl. Warum Asynchron? Warum müssen Sie den Handler registrieren (ich nicht und User.Identity ist gefüllt, aber ich habe nicht async), Warum füllen Sie die Rollen in als nicht sicher, wie Sie darauf zugreifen. – chobo2