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

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Crea\ParameterBundle\Voter;
  4. use Crea\ParameterBundle\Entity\ParameterGroup;
  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, ParameterGroup>
  10. */
  11. class ParameterGroupVoter extends Voter
  12. {
  13. public const string LIST = 'PARAMETER_GROUP_LIST';
  14. public const string CREATE = 'PARAMETER_GROUP_CREATE';
  15. public const string UPDATE = 'PARAMETER_GROUP_UPDATE';
  16. public const string REMOVE = 'PARAMETER_GROUP_REMOVE';
  17. protected function supports($attribute, $subject): bool
  18. {
  19. return in_array($attribute, [
  20. self::LIST,
  21. self::CREATE,
  22. self::UPDATE,
  23. self::REMOVE,
  24. ]) && (null === $subject || $subject instanceof ParameterGroup);
  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::LIST:
  35. return $this->voteOnList($loggedUser);
  36. case self::CREATE:
  37. return $this->voteOnCreate($loggedUser);
  38. case self::UPDATE:
  39. return $this->voteOnUpdate($subject, $loggedUser);
  40. case self::REMOVE:
  41. return $this->voteOnRemove($subject, $loggedUser);
  42. }
  43. return false;
  44. }
  45. private function voteOnList(UserInterface $loggedUser): bool
  46. {
  47. return in_array(self::LIST, $loggedUser->getRoles());
  48. }
  49. private function voteOnCreate(UserInterface $loggedUser): bool
  50. {
  51. return in_array(self::CREATE, $loggedUser->getRoles());
  52. }
  53. private function voteOnUpdate(?ParameterGroup $subject, UserInterface $loggedUser): bool
  54. {
  55. if (null === $subject) {
  56. return false;
  57. }
  58. return in_array(self::UPDATE, $loggedUser->getRoles());
  59. }
  60. private function voteOnRemove(?ParameterGroup $subject, UserInterface $loggedUser): bool
  61. {
  62. if (null === $subject) {
  63. return false;
  64. }
  65. return in_array(self::REMOVE, $loggedUser->getRoles());
  66. }
  67. }