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_UNIT, self::SHOW_DIAGNOSTIC_INTEGRATION_BULK])) {
  14. return false;
  15. }
  16. return true;
  17. }
  18. protected function voteOnAttribute(string $attribute, $subject, TokenInterface $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. }