使用 Elasticsearch ClusterClient 检查用户是否在 Node.js 中具有特定角色

问题描述 投票:0回答:1

检查用户是否具有特定角色

我正在尝试使用以下 Node.js 函数检查用户是否具有特定角色。但是,

clusterClient.asInternalUser.security.getUser()
函数返回 Kibana 中所有用户的信息。我的目标是获取登录用户的角色。

const checkUserRole = (router, clusterClient) => {
  router.post(
    {
      path: '/api/check-user-role',
      validate: false,
    },
    async (context, request, response) => {
      try {
        // Using getUser function to retrieve user information
        const user = await clusterClient.asInternalUser.security.getUser();

        // Check if the user has a specific role
        if (user && user.roles && user.roles.includes('X')) {
          return response.ok({ body: { hasRole: true } });
        } else {
          return response.ok({ body: { hasRole: false } });
        }
      } catch (error) {
        return response.badRequest({ body: { message: error.message } });
      }
    }
  );
};

此函数是否正确检查用户是否具有特定角色?检索登录用户信息的最佳方法是什么?任何建议,将不胜感激。谢谢!

elasticsearch plugins kibana kibana-plugin
1个回答
0
投票

这不是您想要的 API。

security.getUser() 正在调用 Elasticsearch 中的 Get User API,其中列出了本机和保留领域中定义的所有用户。它不返回信息

您要做的是以登录用户身份调用 authenticate API

我相信你可以做到

clusterClient.asCurrentUser.security.authenticate();

(虽然还有其他方法)。

但是,您确定要检查特定角色吗? Elastic 的 RBAC 系统并不是这样工作的。角色的名称并不重要,重要的是它授予的权限。

您可能最好使用 Has Privileges API 来确定是否允许用户执行某些操作,而不是他们是否具有特定的指定角色。

Kibana 开发指南中的安全部分涵盖了其中的一些内容。

© www.soinside.com 2019 - 2024. All rights reserved.