src/Security/Authorization/Voter/UserVoter.php line 9

Open in your IDE?
  1. <?php
  2. namespace App\Security\Authorization\Voter;
  3. use App\Entity\User;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. class UserVoter extends Voter
  7. {
  8.     const CREATE  'create';
  9.     const READ    'read';
  10.     const UPDATE  'update';
  11.     const UPGRADE 'upgrade';
  12.     const DELETE  'delete';
  13.     /**
  14.      * {@inheritDoc}
  15.      */
  16.     protected function supports($attribute$subject)
  17.     {
  18.         $attributes = [
  19.             self::CREATE,
  20.             self::READ,
  21.             self::UPDATE,
  22.             self::UPGRADE,
  23.             self::DELETE,
  24.         ];
  25.         if (!in_array($attribute$attributes)) {
  26.             return false;
  27.         }
  28.         if (!$subject instanceof User) {
  29.             return false;
  30.         }
  31.         return true;
  32.     }
  33.     /**
  34.      * {@inheritDoc}
  35.      */
  36.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  37.     {
  38.         $user $token->getUser();
  39.         if (!$user instanceof User) {
  40.             return false;
  41.         }
  42.         if ($user->isSuperAdmin()) {
  43.             return true;
  44.         }
  45.         switch ($attribute) {
  46.             case self::UPDATE:
  47.                 if ($user === $subject) {
  48.                     return true;
  49.                 }
  50.                 break;
  51.             case self::READ:
  52.                 return true;
  53.         }
  54.         return false;
  55.     }
  56. }