<?php
namespace App\Security;
use App\Entity\ActionType;
use App\Entity\Advertiser;
use App\Entity\Agency;
use App\Entity\Attachment;
use App\Entity\Brand;
use App\Entity\BusinessUnit;
use App\Entity\Category;
use App\Entity\Dashboard;
use App\Entity\Date;
use App\Entity\Deficiency;
use App\Entity\Furniture;
use App\Entity\FurnitureRange;
use App\Entity\News;
use App\Entity\Operation;
use App\Entity\OperationType;
use App\Entity\Page;
use App\Entity\Product;
use App\Entity\PublicHoliday;
use App\Entity\RefrigeratorBin;
use App\Entity\Region;
use App\Entity\Role;
use App\Entity\Season;
use App\Entity\Shop;
use App\Entity\ShopClass;
use App\Entity\ShopSign;
use App\Entity\ShopType;
use App\Entity\Speaker;
use App\Entity\User;
use App\Service\Access;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
class ContentVoters extends Voter implements VoterInterface
{
private Access $accessService;
private array $contentManaged = [
ActionType::class,
Advertiser::class,
Agency::class,
Attachment::class,
Brand::class,
BusinessUnit::class,
Category::class,
Dashboard::class,
Date::class,
Deficiency::class,
Furniture::class,
FurnitureRange::class,
News::class,
Operation::class,
'App\Entity\Operationorder',
OperationType::class,
Page::class,
Product::class,
PublicHoliday::class,
Region::class,
RefrigeratorBin::class,
Role::class,
Season::class,
Shop::class,
ShopClass::class,
ShopSign::class,
ShopType::class,
Speaker::class,
User::class,
];
private array $actions = [
'view',
'viewUnpublish',
'create',
'edit',
'delete',
];
public function __construct(Access $accessService)
{
$this->accessService = $accessService;
}
protected function supports(string $attribute, $subject): bool
{
if (!\in_array($attribute, $this->actions, true)) {
return false;
}
foreach ($this->contentManaged as $entityName) {
if ($subject instanceof $entityName) {
return true;
}
}
return false;
}
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool|string
{
return $this->accessService->checkEntityRight(null, $attribute, $subject);
}
}