getRows()) || $searchQuery->getRows() === 0 ? 1 : ceil($resultSet->getTotalCount() / $searchQuery->getRows()); $resultsRaw = $resultSet->getArrayCopy(); $accessibleResultsMap = []; $resultAmount = count($resultsRaw); $response = []; $resourcePermissions = []; $resultAccessChecker = $this->getResultAccessChecker(); if ($resultAmount > 0) { $accessibleResultsMap = array_flip( $this->getPermissionHelper() ->filterByPermission( array_column($resultsRaw, 'id'), PermissionInterface::RIGHT_READ ) ); foreach ($resultsRaw as $content) { if (!is_array($content)) { $this->logError( sprintf( 'Search content issue detected: expected array, but %s given', json_encode($content) ) ); continue; } $isAccessible = isset($accessibleResultsMap[$content['id']]); if (!$isAccessible) { $hasReadAccess = false; } if ($isAccessible) { $hasReadAccess = $resultAccessChecker->hasReadAccess($content); } if ($hasReadAccess === false) { $content['label'] = __('Access Denied'); $content['id'] = ''; } $resourcePermissions[$content['id']] = !$hasReadAccess; $response['data'][] = $this->getResultSetFilter()->filter($content, $structure); } } $response['readonly'] = $resourcePermissions; $response['success'] = true; $response['page'] = empty($response['data']) ? 0 : $searchQuery->getPage(); $response['total'] = $totalPages; $response['totalCount'] = $resultSet->getTotalCount(); $response['records'] = $resultAmount; return $response; } private function getPermissionHelper(): PermissionHelper { return $this->getServiceLocator()->get(PermissionHelper::class); } private function getResultSetFilter(): ResultSetFilter { return $this->getServiceLocator()->get(ResultSetFilter::class); } private function getResultAccessChecker(): ResultAccessChecker { return $this->getServiceLocator()->get(ResultAccessChecker::class); } }