<?php
namespace App\Security\Voter;
use App\Entity\Enum\RoleEnum;
use App\Entity\RoleManagement;
use App\Entity\User;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class UserImageVoter extends Voter
{
const VIEW = 'view';
protected function supports(string $attribute, $subject): bool
{
if ($attribute != self::VIEW) {
return false;
}
if (!$subject instanceof User) {
return false;
}
return true;
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$authenticatedUser = $token->getUser();
if (!$authenticatedUser instanceof User) return false;
if ($authenticatedUser->getUserRole()->isEmpty()) return false;
/** @var RoleManagement $role */
$role = $authenticatedUser->getUserRole()[0];
if ($role->getRoleName() === RoleEnum::SUPER_ADMIN->value) return true;
/** @var User $user */
$user = $subject;
return $authenticatedUser->getId() === $user->getId();
}
}