public function checkAccess(Message $message, User $user)
 {
     if ($message->getSenderUsername() === $user->getUsername()) {
         return true;
     }
     $userMessage = $this->messageManager->getOneUserMessageByUserAndMessage($user, $message);
     if (!is_null($userMessage)) {
         return true;
     }
     $receiverString = $message->getTo();
     $names = explode(';', $receiverString);
     $usernames = [];
     $groupNames = [];
     $workspaceCodes = [];
     foreach ($names as $name) {
         if (substr($name, 0, 1) === '{') {
             $groupNames[] = trim($name, '{}');
         } elseif (substr($name, 0, 1) === '[') {
             $workspaceCodes[] = trim($name, '[]');
         } else {
             $usernames[] = trim($name);
         }
     }
     if (in_array($user->getUsername(), $usernames)) {
         return true;
     }
     foreach ($user->getGroups() as $group) {
         if (in_array($group->getName(), $groupNames)) {
             return true;
         }
     }
     foreach ($this->workspaceManager->getWorkspacesByUser($user) as $workspace) {
         if (in_array($workspace->getCode(), $workspaceCodes)) {
             return true;
         }
     }
     throw new AccessDeniedException();
 }