[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.
Suggestion cannot be applied right now. Please check back later.
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).