Ich mache etwas ähnliches in einer API-basierten Lösung, aber ich setze den Rollenanspruch, wenn ich den Benutzer erstellen, anstatt in einem Transformator.
Nach dem Blick auf die User.IsInRole()
documentation scheint es, dass diese Methode entwickelt wurde, um zuerst aus einem Cache zu ziehen.
IsInRole zuerst überprüft die IsRoleListCached Eigenschaft , um zu bestimmen, ob eine zwischengespeicherte Liste von Rollennamen für den aktuellen Benutzer zur Verfügung steht. Wenn die IsRoleListCached-Eigenschaft wahr ist, wird die zwischengespeicherte Liste für die angegebene Rolle auf überprüft. Wenn die IsInRole-Methode die angegebene -Rolle in der zwischengespeicherten Liste findet, wird True zurückgegeben. Wenn IsInRole die angegebene Rolle nicht findet, ruft sie die GetRolesForUser-Methode der standardmäßigen Provider-Instanz auf, um zu ermitteln, ob der Benutzername mit einer Rolle aus der Datenquelle für den konfigurierten ApplicationName -Wert verknüpft ist.
Ich vermute, da ClaimTypes.Role
ein gemeinsamer Anspruch ist und nicht ein eigener domänenspezifischer Anspruch (was ich glaube, dass der Anwendungsfall für einen ClaimsTransformer ist), wird die Anwendung einer Standard verwendet wird, zwischengespeichert, Wert Pre-Transformation.
Viel davon ist jedoch Spekulation. Sie können versuchen, den Anspruch festzulegen, wenn Sie den Benutzer erstellen. Ich mache es mit der UserManager-Klasse.
haben Sie versucht, den Anspruch es genau das gleiche ?, dh ich würde nicht davon ausgehen, dass es keine Groß-und Kleinschreibung ist –
Ja. Ich sehe die Rolle in Benutzeransprüchen, wenn ich es debugge. –
haben Sie versucht. HasClaim zu sehen, ob es anders ist? Sind Sie sicher, dass die Überprüfung des Anspruchs nach der Umwandlung erfolgt? –