protected function getResource($service, $resource, $params = [], $payload = null, $checkPermission = true)
    {
        try {
            $result = ServiceManager::handleRequest(
                $service, Verbs::GET, $resource, $params, [], $payload, null, $checkPermission
            );
            if ($result->getStatusCode() >= 300) {
                throw ResponseFactory::createExceptionFromResponse($result);
            }

            $result = $result->getContent();
            if ($result instanceof Arrayable) {
                $result = $result->toArray();
            }

            if (is_string($result)) {
                $result = ['value' => $result];
            } elseif (Arr::isAssoc($result) &&
                config('df.always_wrap_resources') === true &&
                isset($result[config('df.resources_wrapper')])
            ) {
                $result = $result[config('df.resources_wrapper')];
            }

            // Special response handling
            $rSeg = explode('/', $resource);
            $api = $service . '/' . $rSeg[0];
            if (isset($rSeg[1]) && in_array($api, ['system/custom', 'user/custom'])) {
                $result = ['name' => $rSeg[1], 'value' => $result];
            } elseif (isset($rSeg[1]) && $api === $service . '/_table') {
                $result = ['name' => $rSeg[1], 'record' => $result];
            }

            if (in_array($api, ['system/user', 'system/admin'])) {
                $this->setUserPassword($result);
            }

            return $result;
        } catch (NotFoundException $e) {
            $e->setMessage('Resource not found for ' . $service . '/' . $resource);
            throw $e;
        }
    }