src/Infrastructure/Security/DiagnosticVoter.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 DiagnosticVoter extends Voter
  8. {
  9. public const SHOW_DIAGNOSTIC_LIST = 'SHOW_DIAGNOSTIC_LIST';
  10. public const EXPORT_DIAGNOSTIC = 'EXPORT_DIAGNOSTIC';
  11. protected function supports(string $attribute, $subject): bool
  12. {
  13. return \in_array($attribute, [
  14. self::SHOW_DIAGNOSTIC_LIST,
  15. self::EXPORT_DIAGNOSTIC,
  16. ], true);
  17. }
  18. protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
  19. {
  20. $grantedUserTypes = [
  21. UserTypeEnum::TYPE_ADMIN,
  22. UserTypeEnum::TYPE_OPAC_VALIDATEUR_N1,
  23. UserTypeEnum::TYPE_OPAC_VALIDATEUR_N2,
  24. UserTypeEnum::TYPE_OPAC_READ_ONLY,
  25. UserTypeEnum::TYPE_DIAGNOSTIQUEUR,
  26. ];
  27. $user = $token->getUser();
  28. if (!$user instanceof User) {
  29. return false;
  30. }
  31. $isGranted = \in_array($user->getType(), $grantedUserTypes, true);
  32. return match ($attribute) {
  33. self::SHOW_DIAGNOSTIC_LIST => $isGranted,
  34. self::EXPORT_DIAGNOSTIC => $isGranted && UserTypeEnum::TYPE_DIAGNOSTIQUEUR !== $user->getType(),
  35. default => false,
  36. };
  37. }
  38. }