Passed
Push — master ( 12773c...b56fa5 )
by Julito
09:46
created

SessionRelUserExtension::addWhere()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 9
c 1
b 0
f 0
nc 4
nop 2
dl 0
loc 17
rs 9.9666
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\DataProvider\Extension;
8
9
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
10
//use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
11
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
12
use Chamilo\CoreBundle\Entity\SessionRelUser;
13
use Doctrine\ORM\QueryBuilder;
14
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
15
use Symfony\Component\Security\Core\Security;
16
17
final class SessionRelUserExtension implements QueryCollectionExtensionInterface //, QueryItemExtensionInterface
18
{
19
    private Security $security;
20
21
    public function __construct(Security $security)
22
    {
23
        $this->security = $security;
24
    }
25
26
    public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
27
    {
28
        $this->addWhere($queryBuilder, $resourceClass);
29
    }
30
31
    /*public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
32
    {
33
        error_log('applyToItem');
34
        $this->addWhere($queryBuilder, $resourceClass);
35
    }*/
36
37
    private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
38
    {
39
        if (SessionRelUser::class !== $resourceClass) {
40
            return;
41
        }
42
43
        if ($this->security->isGranted('ROLE_ADMIN')) {
44
            return;
45
        }
46
47
        if (null === $user = $this->security->getUser()) {
48
            throw new AccessDeniedException('Access Denied.');
49
        }
50
51
        $rootAlias = $queryBuilder->getRootAliases()[0];
52
        $queryBuilder->andWhere(sprintf('%s.user = :current_user', $rootAlias));
53
        $queryBuilder->setParameter('current_user', $user);
54
    }
55
}
56