src/Security/ContentVoters.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\ActionType;
  4. use App\Entity\Advertiser;
  5. use App\Entity\Agency;
  6. use App\Entity\Attachment;
  7. use App\Entity\Brand;
  8. use App\Entity\BusinessUnit;
  9. use App\Entity\Category;
  10. use App\Entity\Dashboard;
  11. use App\Entity\Date;
  12. use App\Entity\Deficiency;
  13. use App\Entity\Furniture;
  14. use App\Entity\FurnitureRange;
  15. use App\Entity\News;
  16. use App\Entity\Operation;
  17. use App\Entity\OperationType;
  18. use App\Entity\Page;
  19. use App\Entity\Product;
  20. use App\Entity\PublicHoliday;
  21. use App\Entity\RefrigeratorBin;
  22. use App\Entity\Region;
  23. use App\Entity\Role;
  24. use App\Entity\Season;
  25. use App\Entity\Shop;
  26. use App\Entity\ShopClass;
  27. use App\Entity\ShopSign;
  28. use App\Entity\ShopType;
  29. use App\Entity\Speaker;
  30. use App\Entity\User;
  31. use App\Service\Access;
  32. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  33. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  34. use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
  35. class ContentVoters extends Voter implements VoterInterface
  36. {
  37.     private Access $accessService;
  38.     private array $contentManaged = [
  39.         ActionType::class,
  40.         Advertiser::class,
  41.         Agency::class,
  42.         Attachment::class,
  43.         Brand::class,
  44.         BusinessUnit::class,
  45.         Category::class,
  46.         Dashboard::class,
  47.         Date::class,
  48.         Deficiency::class,
  49.         Furniture::class,
  50.         FurnitureRange::class,
  51.         News::class,
  52.         Operation::class,
  53.         'App\Entity\Operationorder',
  54.         OperationType::class,
  55.         Page::class,
  56.         Product::class,
  57.         PublicHoliday::class,
  58.         Region::class,
  59.         RefrigeratorBin::class,
  60.         Role::class,
  61.         Season::class,
  62.         Shop::class,
  63.         ShopClass::class,
  64.         ShopSign::class,
  65.         ShopType::class,
  66.         Speaker::class,
  67.         User::class,
  68.     ];
  69.     private array $actions = [
  70.         'view',
  71.         'viewUnpublish',
  72.         'create',
  73.         'edit',
  74.         'delete',
  75.     ];
  76.     public function __construct(Access $accessService)
  77.     {
  78.         $this->accessService $accessService;
  79.     }
  80.     protected function supports(string $attribute$subject): bool
  81.     {
  82.         if (!\in_array($attribute$this->actionstrue)) {
  83.             return false;
  84.         }
  85.         foreach ($this->contentManaged as $entityName) {
  86.             if ($subject instanceof $entityName) {
  87.                 return true;
  88.             }
  89.         }
  90.         return false;
  91.     }
  92.     protected function voteOnAttribute(string $attributemixed $subjectTokenInterface $token): bool|string
  93.     {
  94.         return $this->accessService->checkEntityRight(null$attribute$subject);
  95.     }
  96. }