src/Security/Voter/EmplacementVoter.php line 13

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use App\Entity\Emplacement;
  4. use App\Entity\User;
  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 EmplacementVoter extends Voter
  11. {
  12. public const EDIT = 'EMPLACEMENT_EDIT';
  13. public const VIEW = 'EMPLACEMENT_VIEW';
  14. public const DELETE = 'EMPLACEMENT_DELETE';
  15. public const CREATE = 'EMPLACEMENT_CREATE';
  16. public function __construct(private Security $security)
  17. {}
  18. protected function supports(string $attribute, $emplacement): bool
  19. {
  20. // replace with your own logic
  21. // https://symfony.com/doc/current/security/voters.html
  22. return in_array($attribute, [self::EDIT, self::VIEW, self::DELETE, self::CREATE])
  23. && $emplacement instanceof \App\Entity\Emplacement;
  24. }
  25. protected function voteOnAttribute(string $attribute, $emplacement, TokenInterface $token): bool
  26. {
  27. $user = $token->getUser();
  28. // if the user is anonymous, do not grant access
  29. if (!$user instanceof UserInterface) {
  30. return false;
  31. }
  32. //On vérifie si l'utilisateur est admin
  33. if($this->security->isGranted('ROLE_ADMIN'))
  34. {
  35. return true;
  36. }
  37. // ... (check conditions and return true to grant permission) ...
  38. switch ($attribute) {
  39. case self::EDIT:
  40. // on vérifie si on peut éditer
  41. return $this->canEdit($emplacement, $user);
  42. break;
  43. case self::VIEW:
  44. // on vérifie si on peut visualiser
  45. return $this->canView($emplacement, $user);
  46. break;
  47. case self::DELETE:
  48. // on vérifie si on peut supprimer
  49. return $this->canDelete($emplacement, $user);
  50. break;
  51. case self::CREATE:
  52. // on vérifie si on peut créer
  53. return $this->canCreate($emplacement, $user);
  54. break;
  55. }
  56. return false;
  57. }
  58. private function canEdit(Emplacement $emplacement, User $user){
  59. // Le compte qui a accès à cet emplacement et qui a le ROLE_EMPLACEMENT peut modifier cet emplacement
  60. if($this->security->isGranted('ROLE_FOODTRUCK') OR $this->security->isGranted('ROLE_EMPLACEMENT'))
  61. {
  62. return ($user === $emplacement->getCreateur());
  63. // foreach ($user->getAccesEmplacements() as $key => $accesEmplacement) {
  64. // if($accesEmplacement->getEmplacement() === $emplacement){
  65. // return true;
  66. // }
  67. // }
  68. }
  69. }
  70. private function canView(Emplacement $emplacement, User $user){
  71. // Le compte qui a accès à cet emplacement peut le visualiser
  72. foreach ($user->getAccesEmplacements() as $key => $accesEmplacement) {
  73. if($accesEmplacement->getEmplacement() === $emplacement){
  74. return true;
  75. }
  76. }
  77. }
  78. private function canDelete(Emplacement $emplacement, User $user){
  79. // Seul l'admin peut supprimer un emplacement
  80. // Le compte qui a accès à un emplacement peut seulement supprimer son accès
  81. }
  82. private function canCreate(Emplacement $emplacement, User $user){
  83. // Le ROLE_FOODTRUCK peut créer un emplacement
  84. // Le ROLE_EMPLACEMENT peut créer un emplacement
  85. if($this->security->isGranted('ROLE_FOODTRUCK') OR $this->security->isGranted('ROLE_EMPLACEMENT'))
  86. {
  87. return true;
  88. }
  89. }
  90. }