1

我有一个复杂的 SCIM 属性,如下所示:

"myattr1": {
  "subattr1": 5,
  "subattr2": [1, 2, 3]
}

我想将其修改为

"myattr1": {
  "subattr1": 5,
  "subattr2": [1, 3]
}

如何使用 PATCH 做到这一点?我应该替换整个子属性还是可以使用 PATCH 从中删除值 2 ?

我知道如何使用多值属性来做到这一点。但我不知道如何为子属性做这件事。

4

2 回答 2

0

[编辑:这是错误的..]

我相信这会奏效:

PATCH /resource/id

{ "schemas":
      ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
     "Operations":[
       {
        "op":"remove",
        "path":"myattr1[subattr2 eq \"2\"]"
        }
    ]
}

路径示例取自https://datatracker.ietf.org/doc/html/rfc7644#page-33,其中提到“路径”:“成员 [值 eq”2819c223-7f76-453a-919d-413861904646”]。 displayName”作为针对复杂多值组属性“members”的 displayName 子属性的一种方式。

如果它是一个字符串,则 2 周围的转义引号是必要的 - 如果该值实际上是一个整数,则它们不是必需的。

于 2022-01-11T20:53:11.413 回答
0

根据 PingIdentity 文档https://github.com/pingidentity/scim2/wiki/Working-with-SCIM-paths#the-value-sub-attribute,简单的多值属性具有称为“值”的特殊隐式子属性。如果是这样,您的 PATCH 请求有效负载应如下所示。

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
           "op": "remove",
           "path": "myattr1.subattr2[value eq \"2\"]"
        }
    ]
}

但是,这种类型的补丁操作在 RFC 7644 ( https://datatracker.ietf.org/doc/html/rfc7644#section-3.5.2 )中没有明确定义

如果在 SCIM 邮件列表https://mailarchive.ietf.org/arch/browse/scim/中提出问题,您将能够确认这一点

于 2022-01-13T20:15:42.167 回答