Completed
Pull Request — master (#147)
by
unknown
11:39
created

TicketVoter::supports()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 4
c 0
b 0
f 0
nc 2
nop 2
dl 0
loc 8
rs 9.4285
1
<?php
2
3
namespace AppBundle\Security;
4
5
use AppBundle\Entity\Ticket;
6
use AppBundle\Entity\User;
7
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
8
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
9
10
class TicketVoter extends Voter
11
{
12
    const EDIT = 'edit';
13
14
    protected function supports($attribute, $subject)
15
    {
16
        if (($attribute !== self::EDIT) && (!$subject instanceof Ticket)) {
17
            return false;
18
        }
19
20
        return true;
21
    }
22
23
    protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
24
    {
25
        $user = $token->getUser();
26
27
        if (!$user instanceof User) {
28
            return false;
29
        }
30
        /** @var Ticket $ticket */
31
        $ticket = $subject;
32
33
        switch ($attribute) {
34
            case self::EDIT:
35
                return $this->canEdit($ticket, $user);
36
        }
37
    }
38
39
    private function canEdit(Ticket $ticket, User $user)
40
    {
41
        if (!$userOrder = $ticket->getUserOrder()) {
42
            return true;
43
        }
44
45
        return $user === $userOrder->getUser();
46
    }
47
}
48