模式
编辑模式编辑
作用域服务编辑
每当 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'); } ); }