<?php
namespace App\Security\Voter\Messenger;
use App\Entity\ChatTemplate;
use App\Entity\Member;
use App\Security\ApiUser;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class ChatTemplateVoter extends Voter
{
public const DELETE = 'delete';
public const EDIT = 'edit';
protected function supports(string $attribute, $subject): bool
{
if (!$subject instanceof ChatTemplate) {
return false;
}
return in_array($attribute, [self::DELETE, self::EDIT], true);
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $token->getUser();
if (!$user instanceof ApiUser) {
return false;
}
switch ($attribute) {
case self::EDIT:
return $this->canEdit($subject, $user->getMember());
case self::DELETE:
return $this->canDelete($subject, $user->getMember());
}
return false;
}
protected function canEdit(ChatTemplate $template, Member $user): bool
{
return $template->getMember()->getId() === $user->getId();
}
protected function canDelete(ChatTemplate $template, Member $user): bool
{
return $this->canEdit($template, $user);
}
}