You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node.js中借助Elasticsearch ClusterClient检查用户是否拥有指定角色

检查用户是否拥有指定角色

现有函数的问题

你当前的函数无法正确检查当前登录用户的角色,原因是clusterClient.asInternalUser.security.getUser()在不带参数调用时,会返回Elasticsearch中所有用户的信息,而非发起当前请求的登录用户。用这个结果判断角色,逻辑完全不成立。

获取当前登录用户信息的最佳方法

在Kibana插件的路由处理逻辑中,无需额外调用Elasticsearch的用户查询接口,context对象已经内置了当前登录用户的完整信息。直接通过context.core.security.user(Kibana 7.x+ 核心重构后的版本)或context.security.user(旧版本)即可获取当前用户的详情,包括角色列表。

修正后的代码示例

const checkUserRole = (router, clusterClient) => {
  router.post(
    {
      path: '/api/check-user-role',
      validate: false,
      options: { authRequired: true } // 强制要求用户登录,未登录请求直接返回401
    },
    async (context, request, response) => {
      try {
        // 从context获取当前登录用户
        const currentUser = context.core.security.user;

        // 检查用户是否包含目标角色
        const hasRole = currentUser.roles.includes('X');
        return response.ok({ body: { hasRole } });
      } catch (error) {
        return response.badRequest({ body: { message: error.message } });
      }
    }
  );
};

额外说明

  1. 版本适配:如果你的Kibana版本是7.x之前的旧版本,将context.core.security.user替换为context.security.user即可。
  2. 权限拦截:路由配置中加入authRequired: true后,Kibana会自动拦截未登录的请求,无需在处理函数中额外判断用户是否存在。
  3. 避免冗余调用:使用context内置的用户信息,既不需要额外的ES请求开销,也能准确获取当前请求的用户数据,是Kibana插件中获取当前用户的标准方式。

内容的提问来源于stack exchange,提问作者Bertug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:22:41