2017-01-11 3 views
1

Ich habe eine Webforms-Anwendung, die mit ASP.NET-Mitgliedschaft erstellt wurde. Ich bin erfolgreich zu Identitäten migriert.Ändern von Rollen Autorisierung zu Ansprüche Autorisierung

Ich möchte jetzt die Berechtigungsberechtigungen anstelle der Rollenberechtigung verwenden, aber die Rolleninformationen für die alten Benutzer wurden in die Tabelle AspNetUserRoles in der Datenbank migriert, aber die Tabelle AspNetUserClaims ist leer.

IdentityResult result1 = manager.AddClaim(user.Id, new Claim(ClaimTypes.Role, "role")); 

Aber die alten Benutzer registriert sind nur in der AspNetUserRoles Tabelle nicht in der AspNetUserClaims Tabelle: Neue Benutzer nach der Migration registriert, kann ich AspNetUserClaims mit dem folgenden Code hinzufügen.

  1. Auf Login wird der erstellte Anspruch umfasst Rolleninformationen aus der AspNetUserRoles Tabelle auch oder nur von dem AspNetUserClaims Tisch?

  2. Wird die User.IsInRole() sowohl die Tabelle AspNetUserRoles als auch die Tabelle AspNetUserClaims prüfen? Wie kann ich Informationen von der Tabelle AspNetUserRoles in die Tabelle AspNetUserClaims migrieren?

Antwort

6

Nicht auf "Ansprüche" Begriff gehakt werden. Hier ist dies eine bequeme Möglichkeit, Informationen in den Cookie einzufügen.

Hier sind eigentlich 2 Arten von "Ansprüche" - eine, die in den Cookie hinzugefügt wird und eine, die in AspNetUserClaims Tabelle erhalten bleibt.

Wenn sich ein Benutzer anmeldet, wird ein Cookie mit Identität erstellt. Identität enthält alle Ansprüche, die der Benutzer hat. Claim hier ist ein Schlüssel-Wert-Paar, das im Cookie als Payload hinzugefügt wird. Cookie-Ansprüche enthält Dinge wie User.Id, SecurityStamp, Username einige andere Framework-bezogene Sachen und ... Liste der Rollen von AspNetUserRoles. Zusammen mit zusätzlichen Ansprüchen von AspNetUserClaims.

Also was Sie versuchen, Rollen in Ansprüche hinzuzufügen - macht keinen Sinn. Rollen werden sowieso im Cookie enthalten sein - hinzugefügt vom Framework.

Wahrscheinlich erkläre ich nicht gut - wenn Sie Ihre Anwendung debuggen, analysieren Sie User Eigenschaft eines Controllers und schauen Sie in ClaimsIdentity und sehen Sie Liste aller Ansprüche. All mein Jibbern wird mehr Sinn machen.

Um Ihre zweite Frage zu beantworten - User.IsInRole() geht nicht in die Datenbank. Diese Methode überprüft nur Informationen im Cookie, siehe source code for yourself: Es wird nur überprüft, ob der Cookie die Ansprüche des Typs mit dem Namen der Rolle enthält, die Sie überprüfen möchten.

Dritte Frage ... wollen Sie das immer noch tun? Sie können eine SQL-Anweisung ausführen, etwa insert into aspnetuserclaims (<columns>) select <columns> from aspnetUserRoles inner join aspnetroles on aspnetUserRoles.roleid = aspnetroles.id.

Ich schrieb über die Ansprüche in den Cookie in my blog a while ago gehen - Sie werden ein besseres Verständnis bekommen, wie alles zusammenkommt.

+0

Dies ist sehr hilfreich und informativ! Einige davon hatte ich angefangen, durch Debugging zu entwirren. Vielen Dank! –

+0

Wenn ich Sie in Bezug auf Frage 1 verstanden habe, ist es bei der Registrierung eines neuen Benutzers ausreichend, seine Rolle in der UserRoles-Tabelle zu registrieren. Es besteht keine Notwendigkeit, seine Rolle in der UserClaims-Tabelle zu registrieren. Ist das korrekt? –

+1

@DovMiller Rollen sind Rollen, keine Notwendigkeit, die gleichen Informationen in Ansprüche zu setzen. Du bist also hier richtig. – trailmax

Verwandte Themen