From d6ee0324101e486cbc42dc5a46e4c286eadccbd0 Mon Sep 17 00:00:00 2001 From: David Kmenta Date: Wed, 18 Apr 2018 11:34:30 +0200 Subject: [PATCH 1/3] UserValueResolver and SecurityUserValueResolver should also resolve class implementing UserInterface --- .../SecurityBundle/SecurityUserValueResolver.php | 11 ++++++++++- .../Tests/SecurityUserValueResolverTest.php | 15 +++++++++++++++ .../Http/Controller/UserValueResolver.php | 11 ++++++++++- .../Tests/Controller/UserValueResolverTest.php | 15 +++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php b/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php index 476e24ee4e456..323ce4adf0cf4 100644 --- a/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php +++ b/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php @@ -40,7 +40,7 @@ public function __construct(TokenStorageInterface $tokenStorage) public function supports(Request $request, ArgumentMetadata $argument) { // only security user implementations are supported - if (UserInterface::class !== $argument->getType()) { + if (!$argument->getType() || !$this->implementsCorrectInterface($argument->getType())) { return false; } @@ -59,4 +59,13 @@ public function resolve(Request $request, ArgumentMetadata $argument) { yield $this->tokenStorage->getToken()->getUser(); } + + /** + * @param string $type + * @return bool + */ + private function implementsCorrectInterface($type) + { + return $type === UserInterface::class || array_key_exists(UserInterface::class, class_implements($type)); + } } diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/SecurityUserValueResolverTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/SecurityUserValueResolverTest.php index a8f005b2e4318..53e20b187f4fc 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/SecurityUserValueResolverTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/SecurityUserValueResolverTest.php @@ -72,6 +72,21 @@ public function testResolve() $this->assertSame(array($user), iterator_to_array($resolver->resolve(Request::create('/'), $metadata))); } + public function testResolveUserInterfaceImplementation() + { + $user = $this->getMockBuilder(UserInterface::class)->getMock(); + $token = $this->getMockBuilder(TokenInterface::class)->getMock(); + $token->expects($this->any())->method('getUser')->willReturn($user); + $tokenStorage = new TokenStorage(); + $tokenStorage->setToken($token); + + $resolver = new SecurityUserValueResolver($tokenStorage); + $metadata = new ArgumentMetadata('foo', DummySubUser::class, false, false, null); + + $this->assertTrue($resolver->supports(Request::create('/'), $metadata)); + $this->assertSame(array($user), iterator_to_array($resolver->resolve(Request::create('/'), $metadata))); + } + public function testIntegration() { $user = $this->getMockBuilder(UserInterface::class)->getMock(); diff --git a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php index 221d8d8eada5c..1d0dc27ea156c 100644 --- a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php +++ b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php @@ -35,7 +35,7 @@ public function __construct(TokenStorageInterface $tokenStorage) public function supports(Request $request, ArgumentMetadata $argument) { // only security user implementations are supported - if (UserInterface::class !== $argument->getType()) { + if (!$argument->getType() || !$this->implementsCorrectInterface($argument->getType())) { return false; } @@ -54,4 +54,13 @@ public function resolve(Request $request, ArgumentMetadata $argument) { yield $this->tokenStorage->getToken()->getUser(); } + + /** + * @param string $type + * @return bool + */ + private function implementsCorrectInterface($type) + { + return $type === UserInterface::class || array_key_exists(UserInterface::class, class_implements($type)); + } } diff --git a/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php b/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php index 62f4c1262120c..20c31098226b9 100644 --- a/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Controller/UserValueResolverTest.php @@ -69,6 +69,21 @@ public function testResolve() $this->assertSame(array($user), iterator_to_array($resolver->resolve(Request::create('/'), $metadata))); } + public function testResolveUserInterfaceImplementation() + { + $user = $this->getMockBuilder(UserInterface::class)->getMock(); + $token = $this->getMockBuilder(TokenInterface::class)->getMock(); + $token->expects($this->any())->method('getUser')->willReturn($user); + $tokenStorage = new TokenStorage(); + $tokenStorage->setToken($token); + + $resolver = new UserValueResolver($tokenStorage); + $metadata = new ArgumentMetadata('foo', DummySubUser::class, false, false, null); + + $this->assertTrue($resolver->supports(Request::create('/'), $metadata)); + $this->assertSame(array($user), iterator_to_array($resolver->resolve(Request::create('/'), $metadata))); + } + public function testIntegration() { $user = $this->getMockBuilder(UserInterface::class)->getMock(); From 185567a789f2b04d4a3a629f1c6e0ffc3b50f082 Mon Sep 17 00:00:00 2001 From: David Kmenta Date: Wed, 18 Apr 2018 11:51:21 +0200 Subject: [PATCH 2/3] fixup! UserValueResolver and SecurityUserValueResolver should also resolve class implementing UserInterface --- src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php | 2 +- .../Component/Security/Http/Controller/UserValueResolver.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php b/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php index 323ce4adf0cf4..85d991a715849 100644 --- a/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php +++ b/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php @@ -66,6 +66,6 @@ public function resolve(Request $request, ArgumentMetadata $argument) */ private function implementsCorrectInterface($type) { - return $type === UserInterface::class || array_key_exists(UserInterface::class, class_implements($type)); + return UserInterface::class === $type || array_key_exists(UserInterface::class, class_implements($type)); } } diff --git a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php index 1d0dc27ea156c..5298c0432f2d1 100644 --- a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php +++ b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php @@ -61,6 +61,6 @@ public function resolve(Request $request, ArgumentMetadata $argument) */ private function implementsCorrectInterface($type) { - return $type === UserInterface::class || array_key_exists(UserInterface::class, class_implements($type)); + return UserInterface::class === $type || array_key_exists(UserInterface::class, class_implements($type)); } } From 2613ab2d7e28f8171f1f57bca44cf8fe5ffaa500 Mon Sep 17 00:00:00 2001 From: David Kmenta Date: Wed, 18 Apr 2018 11:52:06 +0200 Subject: [PATCH 3/3] fixup! UserValueResolver and SecurityUserValueResolver should also resolve class implementing UserInterface --- src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php | 1 + .../Component/Security/Http/Controller/UserValueResolver.php | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php b/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php index 85d991a715849..b8a2454f96be1 100644 --- a/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php +++ b/src/Symfony/Bundle/SecurityBundle/SecurityUserValueResolver.php @@ -62,6 +62,7 @@ public function resolve(Request $request, ArgumentMetadata $argument) /** * @param string $type + * * @return bool */ private function implementsCorrectInterface($type) diff --git a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php index 5298c0432f2d1..01f83a59daefb 100644 --- a/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php +++ b/src/Symfony/Component/Security/Http/Controller/UserValueResolver.php @@ -57,6 +57,7 @@ public function resolve(Request $request, ArgumentMetadata $argument) /** * @param string $type + * * @return bool */ private function implementsCorrectInterface($type) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy