<?php
namespace App\Security\Voter\Message;
use App\Entity\Account\User;
use App\Entity\ChannelUserData\ChannelUserData;
use App\Entity\Chat\Message;
use App\Service\Account\UserService;
use App\Service\Chat\ConversationService;
class PinVoter extends AbstractMessageVoter
{
public function __construct(
UserService $userService,
private ConversationService $conversationService,
) {
parent::__construct($userService);
}
protected function supportedAttribute(): string
{
return 'NIM_PIN';
}
/**
* @param User $user
* @param Message $message
* @param ChannelUserData $channelUserData
* @return int
*/
protected function grant(User $user, $message, ChannelUserData $channelUserData): int
{
$conversation = $message->getConversation();
if (
$this->userService->isAdminForConversation($user, $conversation)
&& $message->getMessageParent() === null
&& $this->conversationService->isPublicCanal($conversation)
) {
return self::ACCESS_GRANTED;
}
return self::ACCESS_DENIED;
}
}