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(); }