src/Security/Voter/ManagerPermissionVoter.php line 13

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voter;
  4. use App\Entity\Activity;
  5. use App\Entity\Campaign;
  6. use App\Entity\Manager;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. class ManagerPermissionVoter extends Voter
  10. {
  11.     public const CREATOR 'creator';
  12.     public const LIMITED_CREATOR 'limited_creator';
  13.     public const VIDEO 'video';
  14.     public const ROSTER 'roster';
  15.     public const SIMPLE_MANAGER 'simple_manager';
  16.     private const LIST = [
  17.         self::CREATOR,
  18.         self::LIMITED_CREATOR,
  19.         self::VIDEO,
  20.         self::ROSTER,
  21.         self::SIMPLE_MANAGER,
  22.     ];
  23.     protected function supports(string $attribute$subject): bool
  24.     {
  25.         return in_array($attributeself::LIST, true)
  26.             && ($subject instanceof Manager || $subject instanceof Campaign || $subject instanceof Activity);
  27.     }
  28.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  29.     {
  30.         $user $token->getUser();
  31.         if (!$user instanceof Manager) {
  32.             return false;
  33.         }
  34.         $hasPermission $user->hasPermission($attribute);
  35.         if (
  36.             $hasPermission
  37.             && $attribute === self::LIMITED_CREATOR
  38.             && ($subject instanceof Campaign || $subject instanceof Activity)
  39.         ) {
  40.             return $user->hasCampaign($subject);
  41.         }
  42.         return $hasPermission;
  43.     }
  44. }