Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
90.00% covered (success)
90.00%
9 / 10
90.00% covered (success)
90.00%
9 / 10
57.14% covered (warning)
57.14%
4 / 7
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ActionVoter
90.00% covered (success)
90.00%
9 / 10
90.00% covered (success)
90.00%
9 / 10
57.14% covered (warning)
57.14%
4 / 7
66.67% covered (warning)
66.67%
2 / 3
8.83
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 supports
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 voteOnAttribute
87.50% covered (warning)
87.50%
7 / 8
87.50% covered (warning)
87.50%
7 / 8
40.00% covered (danger)
40.00%
2 / 5
0.00% covered (danger)
0.00%
0 / 1
7.46
1<?php
2
3namespace App\Security;
4
5use Symfony\Bundle\SecurityBundle\Security;
6use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
7use Symfony\Component\Security\Core\Authorization\Voter\Voter;
8
9/**
10 * @extends Voter<string,mixed>
11 */
12class ActionVoter extends Voter
13{
14    protected const array AUTHORIZED = [
15        Action::HOMEPAGE => [Role::ALL],
16        Action::NAVBAR_ENVIRONNEMENT => [Role::ADMINISTRATEUR, Role::UTILISATEUR],
17        Action::ADMIN_PAGE => [Role::ADMINISTRATEUR],
18        Action::ADMIN_PARAMETER => [Role::ADMINISTRATEUR],
19        Action::ADMIN_PARAMETER_WRITE => [Role::ADMINISTRATEUR],
20        Action::ADMIN_MAIL_TEST => [Role::ADMINISTRATEUR],
21        Action::ADMIN_LOG => [Role::ADMINISTRATEUR],
22    ];
23    /*
24     * @var Security
25     */
26    private Security $security;
27
28    public function __construct(Security $security)
29    {
30        $this->security = $security;
31    }
32
33    /**
34     * Indicates whether an action (attribute) is handled by this voter.
35     */
36    protected function supports(string $attribute, mixed $subject): bool
37    {
38        return in_array($attribute, Action::getActions(), true);
39    }
40
41    /**
42     * Indicates whether the role grants the right to perform an action.
43     */
44    protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
45    {
46        $user = $token->getUser();
47
48        // the user must be logged in; if not, deny permission
49        if (!$user instanceof User) {
50            return false;
51        }
52        $authorized = self::AUTHORIZED[$attribute] ?? [];
53        foreach ($authorized as $authorization) {
54            if ($this->security->isGranted($authorization)) {
55                return true;
56            }
57        }
58
59        return false;
60    }
61}

Branches

Below are the source code lines that represent each code branch as identified by Xdebug. Please note a branch is not necessarily coterminous with a line, a line may contain multiple branches and therefore show up more than once. Please also be aware that some branches may be implicit rather than explicit, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

ActionVoter->__construct
28    public function __construct(Security $security)
29    {
30        $this->security = $security;
31    }
ActionVoter->supports
36    protected function supports(string $attribute, mixed $subject): bool
37    {
38        return in_array($attribute, Action::getActions(), true);
39    }
ActionVoter->voteOnAttribute
44    protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
45    {
46        $user = $token->getUser();
47
48        // the user must be logged in; if not, deny permission
49        if (!$user instanceof User) {
50            return false;
52        $authorized = self::AUTHORIZED[$attribute] ?? [];
53        foreach ($authorized as $authorization) {
53        foreach ($authorized as $authorization) {
54            if ($this->security->isGranted($authorization)) {
55                return true;
53        foreach ($authorized as $authorization) {
53        foreach ($authorized as $authorization) {
54            if ($this->security->isGranted($authorization)) {
55                return true;
56            }
57        }
58
59        return false;
60    }