src/Security/Voter/Template/TemplateVoter.php line 14

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voter\Template;
  4. use App\Model\User\Entity\Profile\Template\Status;
  5. use App\Model\User\Entity\User\Role\Permission;
  6. use App\Security\UserIdentity;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. use Symfony\Component\Security\Core\Security;
  10. class TemplateVoter extends Voter
  11. {
  12.     public const TEMPLATE_CREATE    'template_create';
  13.     public const TEMPLATE_EDIT      'template_edit';
  14.     public const TEMPLATE_DELETE    'template_delete';
  15.     public const TEMPLATE_INDEX     'template_index';
  16.     public const TEMPLATE_SHOW      'template_show';
  17.     public const TEMPLATE_GENERATE  'template_generate';
  18.     public const TEMPLATE_DUPLICATE 'template_duplicate';
  19.     private $security;
  20.     public function __construct(Security $security)
  21.     {
  22.         $this->security $security;
  23.     }
  24.     protected function supports(string $attribute$subject): bool
  25.     {
  26.         return in_array($attribute, [
  27.                 self::TEMPLATE_CREATE,
  28.                 self::TEMPLATE_EDIT,
  29.                 self::TEMPLATE_INDEX,
  30.                 self::TEMPLATE_SHOW ,
  31.                 self::TEMPLATE_GENERATE,
  32.                 self::TEMPLATE_DELETE,
  33.                 self::TEMPLATE_DUPLICATE
  34.             ], true);
  35.     }
  36.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  37.     {
  38.         $user $token->getUser();
  39.         if (!$user instanceof UserIdentity) {
  40.             return false;
  41.         }
  42.         if ($attribute === self::TEMPLATE_CREATE) {
  43.             return $user->isPermission(Permission::TEMPLATE_CREATE);
  44.         }
  45.         if ($subject->is_public and (new Status($subject->status))->isStandard()) {
  46.             if ($attribute === self::TEMPLATE_SHOW) {
  47.                 return $user->isPermission(Permission::TEMPLATE_SHOW);
  48.             }
  49.             if ($attribute === self::TEMPLATE_GENERATE) {
  50.                 return $user->isPermission(Permission::TEMPLATE_GENERATE);
  51.             }
  52.             if ($attribute === self::TEMPLATE_DUPLICATE) {
  53.                 return $user->isPermission(Permission::TEMPLATE_DUPLICATE);
  54.             }
  55.         }
  56.         if ($user->getProfileId() !== $subject->profile_id) {
  57.             return false;
  58.         }
  59.         switch ($attribute) {
  60.             case self::TEMPLATE_INDEX:
  61.                 return $user->isPermission(Permission::TEMPLATE_INDEX);
  62.                 break;
  63.             case self::TEMPLATE_EDIT:
  64.                 return $user->isPermission(Permission::TEMPLATE_EDIT);
  65.                 break;
  66.             case self::TEMPLATE_CREATE:
  67.                 return $user->isPermission(Permission::TEMPLATE_CREATE);
  68.                 break;
  69.             case self::TEMPLATE_SHOW:
  70.                 return $user->isPermission(Permission::TEMPLATE_SHOW);
  71.                 break;
  72.             case self::TEMPLATE_GENERATE:
  73.                 return $user->isPermission(Permission::TEMPLATE_GENERATE);
  74.                 break;
  75.             case self::TEMPLATE_DELETE:
  76.                 return $user->isPermission(Permission::TEMPLATE_DELETE);
  77.                 break;
  78.             case self::TEMPLATE_DUPLICATE:
  79.                 return $user->isPermission(Permission::TEMPLATE_DUPLICATE);
  80.                 break;
  81.         }
  82.         return false;
  83.     }
  84. }