正在加载

模式

每当 Kibana 需要访问保存在 Elasticsearch 中的数据时,它都应该检查最终用户是否有权访问该数据。 Kibana 平台在服务器端引入了一个处理程序接口,以便在内部执行该关联。需要模拟传入请求的核心服务通过请求处理程序接口context参数公开。

async function handler(context, req, res) {
  const data = await context.core.elasticsearch.client.asCurrentUser('ping');
}

请求处理程序上下文公开了以下作用域内的 核心 服务

插件可以使用自定义 API 扩展处理程序上下文,该 API 可供插件本身和所有依赖插件使用。 例如,插件创建一个自定义 Elasticsearch 客户端,并希望通过请求处理程序上下文使用它

import type { CoreSetup, RequestHandlerContext, IScopedClusterClient } from '@kbn/core/server';

interface MyRequestHandlerContext extends RequestHandlerContext {
 myPlugin: {
   client: IScopedClusterClient;
 };
}

class MyPlugin {
  setup(core: CoreSetup) {
    const client = core.elasticsearch.createClient('myClient');
    core.http.registerRouteHandlerContext<MyRequestHandlerContext, 'myPlugin'>('myPlugin', (context, req, res) => {
      return { client: client.asScoped(req) };
    });
    const router = core.http.createRouter<MyRequestHandlerContext>();
    router.get(
      { path: '/api/my-plugin/', validate: … },
      async (context, req, res) => {
        // context type is inferred as MyPluginContext
        const data = await context.myPlugin.client.asCurrentUser('endpoint');
      }
    );
  }
© . All rights reserved.