更新用户配置文件数据 API

编辑

更新用户配置文件数据 API

编辑

用户配置文件功能仅供 Kibana 和 Elastic 的可观测性、企业搜索和 Elastic 安全解决方案使用。个人用户和外部应用程序不应直接调用此 API。Elastic 保留未来版本中更改或删除此功能的权利,恕不另行通知。

更新与指定唯一 ID 关联的用户配置文件的特定数据。

请求

编辑

POST /_security/profile/<uid>/_data

先决条件

编辑

要使用此 API,您必须拥有以下权限之一

  • manage_user_profile 集群权限。
  • 请求中引用的命名空间的 update_profile_data 全局权限。

描述

编辑

更新用户配置文件 API 使用 JSON 对象更新现有用户配置文件文档的 labelsdata 字段。新的键及其值将添加到配置文件文档中,冲突的键将被请求中包含的数据替换。

对于 labelsdata,内容都按顶级字段进行命名空间划分。update_profile_data 全局权限授予仅更新允许的命名空间的权限。

路径参数

编辑
uid
(必需,字符串)用户配置文件的唯一标识符。

查询参数

编辑
if_seq_no
(可选,整数)仅当文档具有此序列号时才执行操作。请参阅 乐观并发控制
if_primary_term
(可选,整数)仅当文档具有此主词时才执行操作。请参阅 乐观并发控制
refresh
(可选,枚举)如果为 true,Elasticsearch 将刷新受影响的分片以使此操作对搜索可见;如果为 wait_for,则等待刷新以使此操作对搜索可见;如果为 false,则不执行任何刷新操作。有效值:truefalsewait_for。默认值:false
uid
(必需,字符串)用户配置文件的唯一标识符。

请求正文

编辑
labels
(必需*,对象)您想要与用户配置文件关联的可搜索数据。此字段支持嵌套数据结构。在 labels 对象中,顶级键不能以下划线 (_) 开头或包含句点 (.)。
data
(必需*,对象)您想要与用户配置文件关联的不可搜索数据。此字段支持嵌套数据结构。在 data 对象中,顶级键不能以下划线 (_) 开头或包含句点 (.)。data 对象不可搜索,但可以使用 获取用户配置文件 API 进行检索。

*表示设置在某些情况下是必需的,但并非所有情况下都必需。

响应正文

编辑

成功的更新用户配置文件数据 API 调用会返回一个 JSON 结构,指示请求已被确认

{
  "acknowledged": true
}

示例

编辑

以下请求更新与 uid 匹配 u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0 的配置文件文档

resp = client.security.update_user_profile_data(
    uid="u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
    labels={
        "direction": "east"
    },
    data={
        "app1": {
            "theme": "default"
        }
    },
)
print(resp)
const response = await client.security.updateUserProfileData({
  uid: "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  labels: {
    direction: "east",
  },
  data: {
    app1: {
      theme: "default",
    },
  },
});
console.log(response);
POST /_security/profile/u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0/_data
{
  "labels": {
    "direction": "east"
  },
  "data": {
    "app1": {
      "theme": "default"
    }
  }
}

您可以更新配置文件数据以替换一些键并添加新键

resp = client.security.update_user_profile_data(
    uid="u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
    labels={
        "direction": "west"
    },
    data={
        "app1": {
            "font": "large"
        }
    },
)
print(resp)
const response = await client.security.updateUserProfileData({
  uid: "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  labels: {
    direction: "west",
  },
  data: {
    app1: {
      font: "large",
    },
  },
});
console.log(response);
POST /_security/profile/u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0/_data
{
  "labels": {
    "direction": "west"
  },
  "data": {
    "app1": {
      "font": "large"
    }
  }
}

如果您现在获取配置文件,将返回合并的配置文件数据

resp = client.security.get_user_profile(
    uid="u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
    data="*",
)
print(resp)
const response = await client.security.getUserProfile({
  uid: "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
  data: "*",
});
console.log(response);
GET /_security/profile/u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0?data=*
{
  "profiles": [
    {
      "uid": "u_P_0BMHgaOK3p7k-PFWUCbw9dQ-UFjt01oWJ_Dp2PmPc_0",
      "enabled": true,
      "last_synchronized": 1642650651037,
      "user": {
        "username": "jackrea",
        "roles": [
          "admin"
        ],
        "realm_name": "native",
        "full_name": "Jack Reacher",
        "email": "[email protected]"
      },
      "labels": {
        "direction": "west"
      },
      "data": {
        "app1": {
          "theme": "default",
          "font": "large"
        }
      },
      "_doc": {
        "_primary_term": 88,
        "_seq_no": 66
      }
    }
  ]
}