[Security] Fix legacy impersonation system #46748
Merged
+5
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
When using the legacy authentication system with a user class not
implementing
EquatableInterface
(for instance, the default when usingSylius) a bug prevents the impersonation system from working properly.
The switch is done correctly, but then the user is disconnected on the
next request because
SecurityContext::hasUserChanged()
compares theroles of the token in session with the roles of the temporary token, and they
aren't equal.
ROLE_PREVIOUS_ADMIN
is added inSwitchUserListener::attemptSwitchUser()
, but then removed if thelegacy system is still enabled in
UserAuthenticationProvider
.It looks like this bug has been introduced while deprecating support for
role classes: d64372d#diff-914ec544d4f7b26fda540aea3d7bc57cc5057d76bfb9ad72047d77739e3bb5a3L115
This patch fixes the issue (tested on a real Sylius project).