defaultAccessChecker = $defaultAccessChecker; } public function checkEntityRead(User $user, Entity $entity, ScopeData $data): bool { /** @var Email $entity */ if ($this->defaultAccessChecker->checkEntityRead($user, $entity, $data)) { return true; } if ($data->isFalse()) { return false; } if ($data->getRead() === Table::LEVEL_NO) { return false; } if (!$entity->has('usersIds')) { $entity->loadLinkMultipleField('users'); } $userIdList = $entity->get('usersIds'); if (is_array($userIdList) && in_array($user->getId(), $userIdList)) { return true; } return false; } public function checkEntityDelete(User $user, Entity $entity, ScopeData $data): bool { /** @var Email $entity */ if ($user->isAdmin()) { return true; } if ($data->isFalse()) { return false; } if ($data->getDelete() === Table::LEVEL_OWN) { if ($user->getId() === $entity->get('assignedUserId')) { return true; } if ($user->getId() === $entity->get('createdById')) { return true; } $assignedUserIdList = $entity->getLinkMultipleIdList('assignedUsers'); if ( count($assignedUserIdList) === 1 && $entity->hasLinkMultipleId('assignedUsers', $user->getId()) ) { return true; } return false; } if ($this->defaultAccessChecker->checkEntityDelete($user, $entity, $data)) { return true; } if ($data->getEdit() === Table::LEVEL_NO && $data->getCreate() === Table::LEVEL_NO) { return false; } if ($entity->get('createdById') !== $user->getId()) { return false; } if ($entity->get('status') !== 'Sent' && $entity->get('status') !== 'Archived') { return true; } return false; } }