ASP.NET Identity, fügen Sie sofort einen anderen Benutzer zur Rolle hinzu (er muss sich nicht ab- und wieder anmelden).

Zunächst bin ich mir dieser Frage bewusst:MVC 5 AddToRole erfordert eine Abmeldung, bevor es funktioniert?

und das hier:Was ist die IUserSecurityStampStore <TUser> -Schnittstelle von ASP.NET Identity?

so bitte nicht als Duplikat markieren.

Ich versuche, einer Rolle einen anderen Benutzer hinzuzufügen (d. H. Der Benutzer, den wir der Rolle hinzufügen, ist nicht der aktuelle Benutzer. Wenn dies der Fall ist, ist die Antwort auf die erste Frage, mit der ich verknüpft bin, ausreichend.)

Wie so:

IdentityResult result = await userManager.AddToRoleAsync(userID, roleName);

Die zwei Situationen, in denen ich das mache, sind: von einer Administratorseite, auf der der aktuelle Benutzer der Administrator ist; und einen Webhook, der mit einer Basisauthentifizierung gesichert ist (bei der es überhaupt keinen aktuellen Benutzer gibt).

THE PROBLEM: Wenn der Benutzer, für den diese Änderung gilt, angemeldet ist und die App verwendet, muss die Änderung "Zur Rolle hinzufügen" sofort angewendet werden. Sie sollten sich nicht abmelden und erneut anmelden müssen, damit die Änderung wirksam wird, und dies muss sofort geschehen.

Vielen Dank an alle.

EDIT: Für User.IsInRole (roleName) ist übrigens eine Abmeldung und Anmeldung erforderlich, um das Hinzufügen zur neuen Rolle zu berücksichtigen. UserManager.IsInRole (userID, roleName) tut dies nicht, da (ich nehme an) direkt die Datenbanktabellen überprüft werden. Wenn der Benutzer jedoch eine mit der gerade hinzugefügten Rolle gesicherte Aktionsmethode trifft, muss er sich dennoch erneut anmelden, was fair genug ist. Immer noch neugierig, ob es einen Ausweg gibt.

EDIT: Hier ist der Quellcode für das Authorize-Attribut:https: //github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/AuthorizeAttribute.c

It verwendet User.IsInRole, weshalb wir uns erneut anmelden müssen. Es scheint, dass die Methode zum Überschreiben AuthorizeCore (HttpContextBase httpContext) ist. Ich bin im Moment nicht mutig oder gut genug, um mich damit herumzuschlagen, aber wenn du es versuchen willst, werden viele Leute das hilfreich finden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage