<?php
namespace App\Security\Voter\Message;
use App\Entity\Account\User;
use App\Entity\ChannelUserData\ChannelUserData;
use App\Entity\Chat\Message;
use App\Enum\ConversationType;
use App\Enum\ConversationUserRole;
use App\Service\Account\UserService;
class DeleteVoter extends AbstractMessageVoter
{
public function __construct(
UserService $userService,
) {
parent::__construct($userService);
}
/**
* @param User $user
* @param Message $message
* @param ChannelUserData $channelUserData
* @return int
*/
public function grant(User $user, $message, ChannelUserData $channelUserData): int
{
$conversation = $message->getConversation();
if ($this->userService->isAdminForConversation($user, $conversation)) {
return self::ACCESS_GRANTED;
}
$conversationUser = $conversation->getConversationUserByUser($user);
if (!$conversationUser) {
return self::ACCESS_DENIED;
}
if ($conversation->getType() === ConversationType::DISCUSSION_SERVICE && $conversationUser->getRole() === ConversationUserRole::USER) {
return self::ACCESS_DENIED;
}
return $user === $message->getCreatedBy();
}
public function supportedAttribute(): string
{
return 'NIM_DELETE';
}
}