Skip to content

Commit 6a1c6f1

Browse files
committed
Merge branch '5.3' into 5.4
* 5.3: [Security] Fix wrong cache directive when using the new PUBLIC_ACCESS attribute
2 parents 857bd71 + 03219b9 commit 6a1c6f1

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

Firewall/AccessListener.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,13 @@ public function authenticate(RequestEvent $event)
8686
$attributes = $request->attributes->get('_access_control_attributes');
8787
$request->attributes->remove('_access_control_attributes');
8888

89-
if (!$attributes || ([AuthenticatedVoter::IS_AUTHENTICATED_ANONYMOUSLY] === $attributes && $event instanceof LazyResponseEvent)) {
89+
if (
90+
!$attributes
91+
|| (
92+
([AuthenticatedVoter::IS_AUTHENTICATED_ANONYMOUSLY] === $attributes || [AuthenticatedVoter::PUBLIC_ACCESS] === $attributes)
93+
&& $event instanceof LazyResponseEvent
94+
)
95+
) {
9096
return;
9197
}
9298

Tests/Firewall/AccessListenerTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,4 +372,41 @@ public function testHandleMWithultipleAttributesShouldBeHandledAsAnd()
372372

373373
$listener(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST));
374374
}
375+
376+
public function testLazyPublicPagesShouldNotAccessTokenStorage()
377+
{
378+
$tokenStorage = $this->createMock(TokenStorageInterface::class);
379+
$tokenStorage->expects($this->never())->method('getToken');
380+
381+
$request = new Request();
382+
$accessMap = $this->createMock(AccessMapInterface::class);
383+
$accessMap->expects($this->any())
384+
->method('getPatterns')
385+
->with($this->equalTo($request))
386+
->willReturn([[AuthenticatedVoter::PUBLIC_ACCESS], null])
387+
;
388+
389+
$listener = new AccessListener($tokenStorage, $this->createMock(AccessDecisionManagerInterface::class), $accessMap, $this->createMock(AuthenticationManagerInterface::class), false);
390+
$listener(new LazyResponseEvent(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST)));
391+
}
392+
393+
/**
394+
* @group legacy
395+
*/
396+
public function testLegacyLazyPublicPagesShouldNotAccessTokenStorage()
397+
{
398+
$tokenStorage = $this->createMock(TokenStorageInterface::class);
399+
$tokenStorage->expects($this->never())->method('getToken');
400+
401+
$request = new Request();
402+
$accessMap = $this->createMock(AccessMapInterface::class);
403+
$accessMap->expects($this->any())
404+
->method('getPatterns')
405+
->with($this->equalTo($request))
406+
->willReturn([[AuthenticatedVoter::IS_AUTHENTICATED_ANONYMOUSLY], null])
407+
;
408+
409+
$listener = new AccessListener($tokenStorage, $this->createMock(AccessDecisionManagerInterface::class), $accessMap, $this->createMock(AuthenticationManagerInterface::class), false);
410+
$listener(new LazyResponseEvent(new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST)));
411+
}
375412
}

0 commit comments

Comments
 (0)