<?php
namespace App\Security\Voter\File;
use App\Entity\Account\User;
use App\Entity\ChannelUserData\ChannelUserData;
use App\Entity\Chat\File;
use App\Security\Voter\AbstractVoter;
use App\Service\Account\UserService;
use Symfony\Component\Security\Core\Security;
class ShowVoter extends AbstractVoter
{
public function __construct(
private Security $security,
UserService $userService,
)
{
parent::__construct($userService);
}
protected function supportedAttribute(): string
{
return 'NIM_VIEW';
}
/**
* @param User $user
* @param File $subject
* @param ChannelUserData $channelUserData
* @return int
*/
protected function grant(User $user, $subject, ChannelUserData $channelUserData): int
{
$conversation = $subject->getFileMessage()?->getConversation();
if ($conversation) {
return $this->security->isGranted('NIM_VIEW', $conversation) ? self::ACCESS_GRANTED : self::ACCESS_DENIED;
}
return self::ACCESS_DENIED;
}
/**
* @param User $user
* @param File $subject
* @return ChannelUserData|null
*/
protected function getChannelUserData(User $user, $subject): ?ChannelUserData
{
return $user->getChannelUserDataByChannel($subject->getChannel());
}
protected function supportSubject($subject): bool
{
return $subject instanceof File;
}
}