src/Voter/IsOwnerVoter.php line 15

Open in your IDE?
  1. <?php
  2. namespace App\Voter;
  3. use App\Entity\Child;
  4. use App\Entity\Referral;
  5. use App\Entity\ReferralDocument;
  6. use App\Entity\User;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. use App\Entity\Address;
  10. use App\Entity\Adult;
  11. use App\Entity\PhoneNumber;
  12. use Psr\Log\LoggerInterface;
  13. class IsOwnerVoter extends Voter
  14. {
  15. const ATTRIBUTE = "IS_OWNER";
  16. private $logger;
  17. public function __construct(LoggerInterface $logger)
  18. {
  19. $this->logger = $logger;
  20. }
  21. public function supports($attribute, $object)
  22. {
  23. $this->logger->debug('***** Logger IsOwnerVoter entering supports, returning: ' . ($attribute == self::ATTRIBUTE && $this->getUserForObject($object) != null) ? 'true' : 'false');
  24. return $attribute == self::ATTRIBUTE && $this->getUserForObject($object) != null;
  25. }
  26. protected function voteOnAttribute($attribute, $object, TokenInterface $token)
  27. {
  28. $this->logger->debug('***** Logger IsOwnerVoter entering voteOnAttribute');
  29. $user = $token->getUser();
  30. if (! ($user instanceof User)) {
  31. $this->logger->debug('***** Logger IsOwnerVoter has no User from token, returning false');
  32. return false;
  33. }
  34. $objectUser = $this->getUserForObject($object);
  35. if (! $objectUser) {
  36. $this->logger->debug('***** Logger IsOwnerVoter has no creating user for object, returning false');
  37. return false;
  38. }
  39. $this->logger->debug('***** Logger IsOwnerVoter returning end result: ' . ($user == $objectUser ? 'true' : 'false'));
  40. return $user == $objectUser;
  41. }
  42. protected function getUserForObject($object)
  43. {
  44. $this->logger->debug(' ***** Logger IsOwnerVoter entering getUserForObject');
  45. if(is_array($object)){
  46. //handle case when result contains both entity and scalar values
  47. $object = $object[0];
  48. $this->logger->debug(' ***** IsOwnerVoter Object is array');
  49. }
  50. $this->logger->debug(" ***** IsOwnerVoter class of object: " . get_class($object));
  51. switch (get_class($object)) {
  52. case Address::class:
  53. case Adult::class:
  54. case Child::class:
  55. case PhoneNumber::class:
  56. case Referral::class:
  57. case ReferralDocument::class:
  58. $this->logger->debug(' ***** IsOwnerVoter Class recognized as having CreatedBy ');
  59. return $object->getCreatedBy();
  60. case User::class:
  61. $this->logger->debug(' ***** IsOwnerVoter Class is User');
  62. return $object;
  63. }
  64. $this->logger->debug(' ***** IsOwnerVoter Class not found in voter');
  65. return null;
  66. }
  67. }