src/Security/Voter/FoodtruckVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\User;
  4. use App\Entity\Foodtruck;
  5. use Symfony\Component\Security\Core\Security;
  6. use Symfony\Component\Security\Core\User\UserInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  9. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  10. class FoodtruckVoter extends Voter
  11. {
  12. public const EDIT = 'FOODTRUCK_EDIT';
  13. public const VIEW = 'FOODTRUCK_VIEW';
  14. public const DELETE = 'FOODTRUCK_DELETE';
  15. private $security;
  16. public function __construct(Security $security)
  17. {
  18. $this->security = $security;
  19. }
  20. protected function supports(string $attribute, $foodtruck): bool
  21. {
  22. // replace with your own logic
  23. // https://symfony.com/doc/current/security/voters.html
  24. return in_array($attribute, [self::EDIT, self::VIEW, self::DELETE])
  25. && $foodtruck instanceof \App\Entity\Foodtruck;
  26. }
  27. protected function voteOnAttribute(string $attribute, $foodtruck, TokenInterface $token): bool
  28. {
  29. $user = $token->getUser();
  30. // if the user is anonymous, do not grant access
  31. if (!$user instanceof UserInterface) {
  32. return false;
  33. }
  34. //On vérifie si l'utilisateur est admin
  35. if($this->security->isGranted('ROLE_ADMIN'))
  36. {
  37. return true;
  38. }
  39. // On vérifie si le foodtruck a un propriétaire
  40. if(null === $foodtruck->getUsers()){
  41. return false;
  42. }
  43. // ... (check conditions and return true to grant permission) ...
  44. switch ($attribute) {
  45. case self::EDIT:
  46. // on vérifie si on peut éditer
  47. return $this->canEdit($foodtruck, $user);
  48. break;
  49. case self::VIEW:
  50. // on vérifie si on peut visualiser
  51. return $this->canView($foodtruck, $user);
  52. break;
  53. case self::DELETE:
  54. // on vérifie si on peut supprimer
  55. return $this->canDelete($foodtruck, $user);
  56. break;
  57. }
  58. return false;
  59. }
  60. private function canEdit(Foodtruck $foodtruck, User $user){
  61. // Le propriétaire du foodtruck peut le modifier
  62. // return $user === $foodtruck->getUsers();
  63. return in_array($foodtruck, $user->getFoodtrucks()->getValues());
  64. // if(in_array($foodtruck,$this->getUser()->getFoodtrucks()->getValues()) OR $this->isGranted('ROLE_ADMIN')){
  65. // return true;
  66. // } else {
  67. // return false;
  68. // }
  69. }
  70. private function canView(Foodtruck $foodtruck, User $user){
  71. return in_array($foodtruck, $user->getFoodtrucks()->getValues());
  72. }
  73. private function canDelete(Foodtruck $foodtruck, User $user){
  74. // Le propriétaire du foodtruck peut le supprimer
  75. return in_array($foodtruck, $user->getFoodtrucks()->getValues());
  76. }
  77. }