src/UI/Admin/Security/AdministratorVoter.php line 11

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\UI\Admin\Security;
  4. use App\Domain\Administrator\Model\Administrator;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. class AdministratorVoter extends Voter
  8. {
  9.     public const REMOVE 'remove';
  10.     public const ACTIVATE 'activate';
  11.     protected function supports(string $attributemixed $subject): bool
  12.     {
  13.         if (!in_array($attribute, [self::REMOVEself::ACTIVATE])) {
  14.             return false;
  15.         }
  16.         if (!$subject instanceof Administrator) {
  17.             return false;
  18.         }
  19.         return true;
  20.     }
  21.     protected function voteOnAttribute(string $attributemixed $subjectTokenInterface $token): bool
  22.     {
  23.         /** @var Administrator $user */
  24.         $user $token->getUser();
  25.         /** @var Administrator $administrator */
  26.         $administrator $subject;
  27.         return match ($attribute) {
  28.             self::REMOVE => $this->canRemove($administrator$user),
  29.             self::ACTIVATE => $this->canActivate($administrator$user),
  30.             default => throw new \LogicException('This code should not be reached!')
  31.         };
  32.     }
  33.     private function canRemove(Administrator $administratorAdministrator $currentUser): bool
  34.     {
  35.         if ($administrator !== $currentUser) {
  36.             return true;
  37.         }
  38.         return false;
  39.     }
  40.     private function canActivate(Administrator $administratorAdministrator $currentUser): bool
  41.     {
  42.         if ($administrator !== $currentUser) {
  43.             return true;
  44.         }
  45.         return false;
  46.     }
  47. }