src/Security/Voter/Message/DeleteVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter\Message;
  3. use App\Entity\Account\User;
  4. use App\Entity\ChannelUserData\ChannelUserData;
  5. use App\Entity\Chat\Message;
  6. use App\Enum\ConversationType;
  7. use App\Enum\ConversationUserRole;
  8. use App\Service\Account\UserService;
  9. class DeleteVoter extends AbstractMessageVoter
  10. {
  11.     public function __construct(
  12.         UserService $userService,
  13.     ) {
  14.         parent::__construct($userService);
  15.     }
  16.     /**
  17.      * @param User $user
  18.      * @param Message $message
  19.      * @param ChannelUserData $channelUserData
  20.      * @return int
  21.      */
  22.     public function grant(User $user$messageChannelUserData $channelUserData): int
  23.     {
  24.         $conversation $message->getConversation();
  25.         if ($this->userService->isAdminForConversation($user$conversation)) {
  26.             return self::ACCESS_GRANTED;
  27.         }
  28.         $conversationUser $conversation->getConversationUserByUser($user);
  29.         if (!$conversationUser) {
  30.             return self::ACCESS_DENIED;
  31.         }
  32.         if ($conversation->getType() === ConversationType::DISCUSSION_SERVICE && $conversationUser->getRole() === ConversationUserRole::USER) {
  33.             return self::ACCESS_DENIED;
  34.         }
  35.         return $user === $message->getCreatedBy();
  36.     }
  37.     public function supportedAttribute(): string
  38.     {
  39.         return 'NIM_DELETE';
  40.     }
  41. }