Test Failed
Push — develop ( 05150f...e72854 )
by Daniel
04:23
created

PublishableConfigurator::onKernelRequest()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
namespace Silverback\ApiComponentBundle\EventSubscriber;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Doctrine\ORM\Query\Expr;
7
use Silverback\ApiComponentBundle\Entity\User\User;
8
use Silverback\ApiComponentBundle\Filter\Doctrine\PublishableFilter;
9
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
10
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
11
12
final class PublishableConfigurator
13
{
14
    private $tokenStorage;
15
    private $authorizationChecker;
16
    private $em;
17
18
    public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, AuthorizationCheckerInterface $checker)
19
    {
20
        $this->em = $entityManager;
21
        $this->tokenStorage = $tokenStorage;
22
        $this->authorizationChecker = $checker;
23
    }
24
25
    public function onKernelRequest(): void
26
    {
27
        if ($this->isAuthorized()) {
28
            return;
29
        }
30
        /** @var PublishableFilter $filter */
31
        $filter = $this->em->getFilters()->enable('publishable_filter');
32
        $filter->setExpressionBuilder(new Expr());
33
    }
34
35
    private function isAuthorized(): bool
36
    {
37
        $token = $this->tokenStorage->getToken();
38
        if (!$token) {
39
            return false;
40
        }
41
        $user = $token->getUser();
42
        if (!$user instanceof User) {
43
            return false;
44
        }
45
        return $this->authorizationChecker->isGranted('ROLE_ADMIN');
46
    }
47
}
48