我正在尝试使用以下 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 } });
}
}
);
};
此函数是否正确检查用户是否具有特定角色?检索登录用户信息的最佳方法是什么?任何建议,将不胜感激。谢谢!
这不是您想要的 API。
security.getUser() 正在调用 Elasticsearch 中的 Get User API,其中列出了本机和保留领域中定义的所有用户。它不返回信息
您要做的是以登录用户身份调用 authenticate API。
我相信你可以做到
clusterClient.asCurrentUser.security.authenticate();
(虽然还有其他方法)。
但是,您确定要检查特定角色吗? Elastic 的 RBAC 系统并不是这样工作的。角色的名称并不重要,重要的是它授予的权限。
您可能最好使用 Has Privileges API 来确定是否允许用户执行某些操作,而不是他们是否具有特定的指定角色。
Kibana 开发指南中的安全部分涵盖了其中的一些内容。