<?php
namespace App\Security\Voter\Conversation;
use App\Entity\Account\User;
use App\Entity\ChannelUserData\ChannelUserData;
use App\Entity\Chat\Canal;
use App\Entity\Chat\Conversation;
use App\Enum\CanalOpenToEnum;
class CreateMessageVoter extends AbstractConversationVoter
{
public function supportedAttribute(): string
{
return 'NIM_CREATE';
}
/**
* @param User $user
* @param Conversation $conversation
* @param ChannelUserData $channelUserData
* @return int
*/
public function grant(User $user, $conversation, ChannelUserData $channelUserData): int
{
$conversationUser = $conversation->getConversationUserByUser($user);
if (!$conversationUser) {
return self::ACCESS_DENIED;
}
if ($this->userService->isAdminForConversation($user, $conversation)) {
return self::ACCESS_GRANTED;
}
if (!$conversation instanceof Canal) {
return self::ACCESS_GRANTED;
}
if ($conversation->getOpenTo() === CanalOpenToEnum::ALL) {
return self::ACCESS_GRANTED;
} else {
return $channelUserData->isLearner() === false;
}
return self::ACCESS_DENIED;
}
}