src/Security/Voter/Certificate/CertificateVoter.php line 13

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voter\Certificate;
  4. use App\Model\User\Entity\User\Role\Permission;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\Security;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class CertificateVoter extends Voter
  10. {
  11.     public const CERTIFICATE_SHOW 'certificate_show';
  12.     public const CERTIFICATE_LIST 'certificate_list';
  13.     public const CERTIFICATE_ADD 'certificate_add';
  14.     public const CERTIFICATE_DELETE 'certificate_delete';
  15.     private $security;
  16.     /**
  17.      * @param Security $security
  18.      */
  19.     public function __construct(Security $security)
  20.     {
  21.         $this->security $security;
  22.     }
  23.     /**
  24.      * @param string $attribute
  25.      * @param mixed $subject
  26.      * @return bool
  27.      */
  28.     protected function supports(string $attribute$subject): bool
  29.     {
  30.         return in_array($attribute, [self::CERTIFICATE_SHOWself::CERTIFICATE_ADDself::CERTIFICATE_LISTself::CERTIFICATE_DELETE], true);
  31.     }
  32.     /**
  33.      * @param string $attribute
  34.      * @param mixed $user_id
  35.      * @param TokenInterface $token
  36.      * @return bool
  37.      */
  38.     protected function voteOnAttribute(string $attribute$user_idTokenInterface $token): bool
  39.     {
  40.         if ($this->security->isGranted('ROLE_MODERATOR')) {
  41.             return true;
  42.         }
  43.         $user $token->getUser();
  44.         if (!$user instanceof UserInterface) {
  45.             return false;
  46.         }
  47.         if ($user->getId() !== $user_id) {
  48.             return false;
  49.         }
  50.         switch ($attribute) {
  51.             case self::CERTIFICATE_LIST:
  52.                 if ($user->getId() === $user_id) {
  53.                     return true;
  54.                 }
  55.                 return $user->isPermission(Permission::CERTIFICATE_LIST);
  56.                 break;
  57.             case self::CERTIFICATE_DELETE:
  58.                 return $user->isPermission(Permission::CERTIFICATE_DELETE);
  59.                 break;
  60.             case self::CERTIFICATE_SHOW:
  61.                 if ($user->getId() === $user_id) {
  62.                     return true;
  63.                 }
  64.                 break;
  65.             case self::CERTIFICATE_ADD:
  66.                 return $user->isPermission(Permission::CERTIFICATE_ADD);
  67.                 break;
  68.             default:
  69.             }
  70.         return false;
  71.     }
  72. }