SecurityHelper::getUser()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 4
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 9
rs 10
ccs 0
cts 3
cp 0
crap 6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LAG\AdminBundle\Security\Helper;
6
7
use LAG\AdminBundle\Resource\Registry\ResourceRegistryInterface;
8
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
9
use Symfony\Component\Security\Core\Security;
10
use Symfony\Component\Security\Core\User\UserInterface;
11
12
class SecurityHelper
13
{
14
    public function __construct(
15
        private Security $security,
16
        private ResourceRegistryInterface $registry
17
    ) {
18
    }
19
20
    public function isOperationAllowed(string $resourceName, string $operationName): bool
21
    {
22
        $user = $this->getUser();
23
        $resource = $this->registry->get($resourceName);
24
25
        if (!$resource->hasOperation($operationName)) {
26
            return false;
27
        }
28
        $operation = $resource->getOperation($operationName);
29
30
        foreach ($operation->getPermissions() ?? [] as $permission) {
31
            if (!$this->security->isGranted($permission, $user)) {
32
                return false;
33
            }
34
        }
35
36
        return true;
37
    }
38
39
    public function getUser(): UserInterface
40
    {
41
        $user = $this->security->getUser();
42
43
        if ($user === null) {
44
            throw new AccessDeniedException();
45
        }
46
47
        return $user;
48
    }
49
}
50