diff --git a/src/UserContext/RoleProvider.php b/src/UserContext/RoleProvider.php index 2176b1e7..696a47c6 100644 --- a/src/UserContext/RoleProvider.php +++ b/src/UserContext/RoleProvider.php @@ -56,9 +56,13 @@ public function updateUserContext(UserContext $context) return; } - $roles = array_map(function (Role $role) { - return $role->getRole(); - }, $token->getRoles()); + if (method_exists($token, 'getRoleNames')) { + $roles = $token->getRoleNames(); + } else { + $roles = array_map(function (Role $role) { + return $role->getRole(); + }, $token->getRoles()); + } // Order is not important for roles and should not change hash. sort($roles); diff --git a/tests/Unit/UserContext/RoleProviderTest.php b/tests/Unit/UserContext/RoleProviderTest.php index 35a3568e..03753488 100644 --- a/tests/Unit/UserContext/RoleProviderTest.php +++ b/tests/Unit/UserContext/RoleProviderTest.php @@ -15,6 +15,7 @@ use FOS\HttpCacheBundle\UserContext\RoleProvider; use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration; use PHPUnit\Framework\TestCase; +use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Role\Role; @@ -25,13 +26,18 @@ class RoleProviderTest extends TestCase public function testProvider() { - $roles = [new Role('ROLE_USER')]; - - $token = \Mockery::mock(TokenInterface::class); + if (method_exists(AnonymousToken::class, 'getRoleNames')) { + $token = \Mockery::mock(AnonymousToken::class); + $token->shouldReceive('getRoleNames')->andReturn(['ROLE_USER']); + $token->shouldNotReceive('getRoles'); + } else { + $token = \Mockery::mock(TokenInterface::class); + $token->shouldReceive('getRoles')->andReturn([new Role('ROLE_USER')]); + $token->shouldNotReceive('getRoleNames'); + } $securityContext = $this->getTokenStorageMock(); $securityContext->shouldReceive('getToken')->andReturn($token); - $token->shouldReceive('getRoles')->andReturn($roles); $userContext = new UserContext(); $provider = new RoleProvider($securityContext);