src/Security/ReportProfileVoter.php line 12

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security;
  4. use App\Entity\Customer;
  5. use App\Entity\User;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. class ReportProfileVoter extends Voter
  9. {
  10.     public const VIEW = 'report_profile_view';
  11.     public const EDIT = 'report_profile_edit';
  12.     protected function supports($attribute, $subject): bool
  13.     {
  14.         return in_array($attribute, [self::VIEW, self::EDIT], true) && $subject instanceof Customer;
  15.     }
  16.     protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
  17.     {
  18.         $user = $token->getUser();
  19.         if (!$user instanceof User) {
  20.             return false;
  21.         }
  22.         if ($user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_SUPER_ADMIN')) {
  23.             return true;
  24.         }
  25.         $ownCustomer = $user->getActiveCustomer();
  26.         if (!$ownCustomer || !$subject->getIsActive() || null === $subject->getId() || $ownCustomer->getId() !== $subject->getId()) {
  27.             return false;
  28.         }
  29.         return self::VIEW === $attribute || $user->hasRole('ROLE_CUSTOMER');
  30.     }
  31. }