vendor/crea/parameter-bundle/src/Voter/ParameterTypeVoter.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Crea\ParameterBundle\Voter;
  4. use Crea\ParameterBundle\Entity\ParameterType;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. /**
  9. * @extends Voter<string, ParameterType>
  10. */
  11. class ParameterTypeVoter extends Voter
  12. {
  13. public const string CREATE = 'PARAMETER_TYPE_CREATE';
  14. public const string UPDATE = 'PARAMETER_TYPE_UPDATE';
  15. public const string UPDATE_CODE = 'PARAMETER_TYPE_UPDATE_CODE';
  16. public const string REMOVE = 'PARAMETER_TYPE_REMOVE';
  17. protected function supports($attribute, $subject): bool
  18. {
  19. return in_array($attribute, [
  20. self::CREATE,
  21. self::UPDATE,
  22. self::UPDATE_CODE,
  23. self::REMOVE,
  24. ]) && (null === $subject || $subject instanceof ParameterType);
  25. }
  26. protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
  27. {
  28. /** @var UserInterface $loggedUser */
  29. $loggedUser = $token->getUser();
  30. if (!$loggedUser instanceof UserInterface) {
  31. return false;
  32. }
  33. switch ($attribute) {
  34. case self::CREATE:
  35. return $this->voteOnCreate($loggedUser);
  36. case self::UPDATE:
  37. return $this->voteOnUpdate($subject, $loggedUser);
  38. case self::UPDATE_CODE:
  39. return $this->voteOnUpdateCode($subject, $loggedUser);
  40. case self::REMOVE:
  41. return $this->voteOnRemove($subject, $loggedUser);
  42. }
  43. return false;
  44. }
  45. private function voteOnCreate(UserInterface $loggedUser): bool
  46. {
  47. return in_array(self::CREATE, $loggedUser->getRoles());
  48. }
  49. private function voteOnUpdate(?ParameterType $subject, UserInterface $loggedUser): bool
  50. {
  51. if (null === $subject) {
  52. return false;
  53. }
  54. return in_array(self::UPDATE, $loggedUser->getRoles());
  55. }
  56. private function voteOnUpdateCode(?ParameterType $subject, UserInterface $loggedUser): bool
  57. {
  58. if (null === $subject) {
  59. return false;
  60. }
  61. return in_array(self::UPDATE_CODE, $loggedUser->getRoles());
  62. }
  63. private function voteOnRemove(?ParameterType $subject, UserInterface $loggedUser): bool
  64. {
  65. if (null === $subject) {
  66. return false;
  67. }
  68. return in_array(self::REMOVE, $loggedUser->getRoles());
  69. }
  70. }