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

PublishableConfigurator   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 18
dl 0
loc 34
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A isAuthorized() 0 11 3
A __construct() 0 5 1
A onKernelRequest() 0 8 2
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