UserVoter.php 2.54 KB
Newer Older
Julien Jorry committed
1 2
<?php

3
namespace App\Security\Voter;
Julien Jorry committed
4 5

use App\Entity\User;
6
use App\Security\Voter\AbstractVoter;
Julien Jorry committed
7 8 9 10
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;

11
class UserVoter extends AbstractVoter
Julien Jorry committed
12 13 14 15
{
    protected function supports($attribute, $subject)
    {
        // Est-ce que l'action demandée existe
16
        if (!parent::supportsAttribute($attribute)) {
Julien Jorry committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
            return false;
        }

        // On ne vote que pour des objets de type User
        if (!$subject instanceof User) {
            return false;
        }

        return true;
    }

    protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
    {
        $user = $token->getUser();

        if (!$user instanceof User) {
            // L'utilisateur doit être loggué
            return false;
        }

        // Les admins peuvent tout faire !
38
        if ($this->decisionManager->decide($token, array('ROLE_SUPER_ADMIN', 'ROLE_ADMIN', 'ROLE_ADMIN_SIEGE'))) {
Julien Jorry committed
39 40 41 42
            return true;
        }

        switch ($attribute) {
43 44
            case 'add_tr_sie_grp':
                return true;
45 46 47 48 49 50
            case self::LIST:
                return $this->canList($subject, $user);
            case self::VIEW:
                return $this->canView($subject, $user);
            case self::CREATE:
                return $this->canCreate($subject, $user);
Julien Jorry committed
51 52
            case self::EDIT:
                return $this->canEdit($subject, $user);
53 54 55 56 57 58
            case self::DELETE:
                return $this->canDelete($subject, $user);
            case self::EXPORT:
                return $this->canExport($subject, $user);
            case self::ALL:
                return $this->canAll($subject, $user);
Julien Jorry committed
59 60 61 62 63
        }

        throw new \LogicException('This code should not be reached!');
    }

64
    private function canList(User $subject, User $user)
Julien Jorry committed
65
    {
66 67 68 69 70 71 72
        // Only ADMIN can list users so already return true before
        return false;
    }

    private function canView(User $subject, User $user)
    {
        // if ($this->decisionManager->decide($token, array('ROLE_ADHERENT'))) {
Julien Jorry committed
73 74
    }

75
    private function canCreate(User $subject, User $user)
Julien Jorry committed
76 77 78 79 80 81 82
    {
    }

    private function canEdit(User $subject, User $user)
    {
    }

83 84 85 86 87 88 89 90 91
    private function canDelete(User $subject, User $user)
    {
    }

    private function canExport(User $subject, User $user)
    {
    }

    private function canAll(User $subject, User $user)
Julien Jorry committed
92 93 94
    {
    }
}