src/Security/Voter/ModuleVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Repository\ModuleRepository;
  4. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use Symfony\Component\Security\Core\User\UserInterface;
  7. class ModuleVoter extends Voter {
  8.     public const MODULES = [
  9.         "hosting" => "hosting",
  10.     ];
  11.     private ModuleRepository $moduleRepository;
  12.     public function __construct(ModuleRepository $moduleRepository) {
  13.         $this->moduleRepository $moduleRepository;
  14.     }
  15.     /**
  16.      * Please pass a `null` subject.
  17.      * The attribute already refers to the module we want access to.
  18.      */
  19.     protected function supports(string $attribute$subject): bool {
  20.         return in_array($attributeself::MODULES);
  21.     }
  22.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool {
  23.         $user $token->getUser();
  24.         if (!$user instanceof UserInterface) return false;
  25.         switch ($attribute) {
  26.             case self::MODULES["hosting"]:
  27.                 $module $this->moduleRepository->findOneBy([
  28.                     "slug" => $attribute,
  29.                 ]);
  30.                 return $module->getActive();
  31.             default:
  32.                 return false;
  33.         }
  34.     }
  35. }