Skip to content

Commit 9abab41

Browse files
authored
Merge pull request #500 from mbabker/actor-provider
Use the new actor provider interface
2 parents bf00701 + 1415e20 commit 9abab41

File tree

8 files changed

+67
-3
lines changed

8 files changed

+67
-3
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
1919
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
2020
"symfony/http-kernel": "^5.4 || ^6.0 || ^7.0",
21-
"gedmo/doctrine-extensions": "^3.15.0"
21+
"gedmo/doctrine-extensions": "^3.19.0"
2222
},
2323
"require-dev": {
2424
"phpstan/phpstan": "^1.10",

src/DependencyInjection/StofDoctrineExtensionsExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public function load(array $configs, ContainerBuilder $container)
100100
$config = $processor->processConfiguration($configuration, $configs);
101101

102102
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
103+
$loader->load('tool.xml');
103104

104105
$loaded = array();
105106

src/EventListener/BlameListener.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* Sets the username from the security context by listening on kernel.request
1515
*
1616
* @author David Buchmann <[email protected]>
17+
*
18+
* @deprecated to be removed in 2.0, use the actor provider instead
1719
*/
1820
class BlameListener implements EventSubscriberInterface
1921
{

src/EventListener/LoggerListener.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
*
1717
* @author Christophe Coevoet <[email protected]>
1818
*
19+
* @deprecated to be removed in 2.0, use the actor provider instead
20+
*
1921
* @phpstan-template T of Loggable|object
2022
*/
2123
class LoggerListener implements EventSubscriberInterface

src/Resources/config/blameable.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@
1616
<call method="setAnnotationReader">
1717
<argument type="service" id=".stof_doctrine_extensions.reader" on-invalid="ignore" />
1818
</call>
19+
<call method="setActorProvider">
20+
<argument type="service" id="stof_doctrine_extensions.tool.actor_provider" />
21+
</call>
1922
</service>
2023

2124
<service id="stof_doctrine_extensions.event_listener.blame" class="%stof_doctrine_extensions.event_listener.blame.class%">
25+
<deprecated package="stof/doctrine-extensions-bundle" version="1.14">The "%service_id%" service is deprecated and will be removed in 2.0. The "stof_doctrine_extensions.tool.actor_provider" service should be used to provide the user instead.</deprecated>
2226
<argument type="service" id="stof_doctrine_extensions.listener.blameable" />
2327
<argument type="service" id="security.token_storage" on-invalid="null" />
2428
<argument type="service" id="security.authorization_checker" on-invalid="null" />
25-
<tag name="kernel.event_subscriber" />
2629
</service>
2730
</services>
2831
</container>

src/Resources/config/loggable.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@
1616
<call method="setAnnotationReader">
1717
<argument type="service" id=".stof_doctrine_extensions.reader" on-invalid="ignore" />
1818
</call>
19+
<call method="setActorProvider">
20+
<argument type="service" id="stof_doctrine_extensions.tool.actor_provider" />
21+
</call>
1922
</service>
2023

2124
<service id="stof_doctrine_extensions.event_listener.logger" class="%stof_doctrine_extensions.event_listener.logger.class%">
25+
<deprecated package="stof/doctrine-extensions-bundle" version="1.14">The "%service_id%" service is deprecated and will be removed in 2.0. The "stof_doctrine_extensions.tool.actor_provider" service should be used to provide the user instead.</deprecated>
2226
<argument type="service" id="stof_doctrine_extensions.listener.loggable" />
2327
<argument type="service" id="security.token_storage" on-invalid="null" />
2428
<argument type="service" id="security.authorization_checker" on-invalid="null" />
25-
<tag name="kernel.event_subscriber" />
2629
</service>
2730
</services>
2831
</container>

src/Resources/config/tool.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
6+
7+
<services>
8+
<service id="stof_doctrine_extensions.tool.actor_provider" class="Stof\DoctrineExtensionsBundle\Tool\TokenStorageActorProvider" public="false">
9+
<argument type="service" id="security.token_storage" on-invalid="null" />
10+
<argument type="service" id="security.authorization_checker" on-invalid="null" />
11+
</service>
12+
</services>
13+
</container>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Stof\DoctrineExtensionsBundle\Tool;
4+
5+
use Gedmo\Tool\ActorProviderInterface;
6+
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
7+
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
8+
use Symfony\Component\Security\Core\User\UserInterface;
9+
10+
/**
11+
* Provides an actor for the extensions using the token storage.
12+
*
13+
* @internal
14+
*/
15+
final class TokenStorageActorProvider implements ActorProviderInterface
16+
{
17+
private ?TokenStorageInterface $tokenStorage;
18+
private ?AuthorizationCheckerInterface $authorizationChecker;
19+
20+
public function __construct(?TokenStorageInterface $tokenStorage = null, ?AuthorizationCheckerInterface $authorizationChecker = null)
21+
{
22+
$this->tokenStorage = $tokenStorage;
23+
$this->authorizationChecker = $authorizationChecker;
24+
}
25+
26+
public function getActor(): ?UserInterface
27+
{
28+
if (null === $this->tokenStorage || null === $this->authorizationChecker) {
29+
return null;
30+
}
31+
32+
$token = $this->tokenStorage->getToken();
33+
34+
if (null === $token || !$this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
35+
return null;
36+
}
37+
38+
return $token->getUser();
39+
}
40+
}

0 commit comments

Comments
 (0)