src/Infrastructure/Security/DiagnosticIntegrationVoter.php line 10

Open in your IDE?
  1. <?php
  2. namespace App\Infrastructure\Security;
  3. use App\Domain\Common\Entity\User;
  4. use App\Domain\Common\Enum\UserTypeEnum;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. class DiagnosticIntegrationVoter extends Voter
  8. {
  9.     public const SHOW_DIAGNOSTIC_INTEGRATION_UNIT 'SHOW_DIAGNOSTIC_INTEGRATION_UNIT';
  10.     public const SHOW_DIAGNOSTIC_INTEGRATION_BULK 'SHOW_DIAGNOSTIC_INTEGRATION_BULK';
  11.     protected function supports(string $attribute$subject): bool
  12.     {
  13.         if (!\in_array($attribute, [self::SHOW_DIAGNOSTIC_INTEGRATION_UNITself::SHOW_DIAGNOSTIC_INTEGRATION_BULK])) {
  14.             return false;
  15.         }
  16.         return true;
  17.     }
  18.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  19.     {
  20.         $user $token->getUser();
  21.         if (!$user instanceof User) {
  22.             return false;
  23.         }
  24.         if (UserTypeEnum::TYPE_ADMIN === $user->getType()) {
  25.             return true;
  26.         }
  27.         if (self::SHOW_DIAGNOSTIC_INTEGRATION_UNIT === $attribute) {
  28.             return $this->canUseUnitIntegration($user);
  29.         }
  30.         if (self::SHOW_DIAGNOSTIC_INTEGRATION_BULK === $attribute) {
  31.             return $this->canUseBulkIntegration($user);
  32.         }
  33.         return false;
  34.     }
  35.     protected function canUseUnitIntegration(User $user): bool
  36.     {
  37.         return \in_array($user->getType(), [
  38.             UserTypeEnum::TYPE_DIAGNOSTIQUEUR,
  39.             UserTypeEnum::TYPE_OPAC_VALIDATEUR_N1,
  40.             UserTypeEnum::TYPE_OPAC_VALIDATEUR_N2,
  41.         ]);
  42.     }
  43.     protected function canUseBulkIntegration(User $user): bool
  44.     {
  45.         return \in_array($user->getType(), [
  46.             UserTypeEnum::TYPE_DIAGNOSTIQUEUR,
  47.             UserTypeEnum::TYPE_OPAC_VALIDATEUR_N1,
  48.             UserTypeEnum::TYPE_OPAC_VALIDATEUR_N2,
  49.         ]);
  50.         return UserTypeEnum::TYPE_DIAGNOSTIQUEUR === $user->getType();
  51.     }
  52. }