如何编写 SPML v2 'modify' 请求删除对象属性
How to compose SPML v2 'modify' request to delete object attribute
我需要通过对 Active Roles Server.
的 SPMLv2 SOAP 请求来维护 Active Directory 服务
我正在尝试做一些表面上很简单的事情:从对象中删除 telephoneNumber 属性。我以前从未听说过 SPML,所以我花了一些时间试图了解 OASIS open standards.
列表中可用的规范
如果值为 已知,我已经想出了如何做到这一点。例如,如果 telephoneNumber 属性与值“12345”匹配,下面的有效负载将删除它,但不会删除任何其他值。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:oasis:names:tc:SPML:2:0">
<soapenv:Header/>
<soapenv:Body>
<urn:modifyRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0">
<urn:psoID ID="CN=Some User,OU=User,OU=Accounts,DC=someorganisation,DC=org"/>
<urn:modification>
<modification name="telephoneNumber" operation="delete" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>12345</value>
</modification>
</urn:modification>
</urn:modifyRequest>
</soapenv:Body>
</soapenv:Envelope>
我想不通的是如何为未指定的值执行此操作,即在删除之前我不关心该值是什么,我只想删除它。我怀疑这与 SelectionType 有关,我只需要使用 'match anything' 选择器,但我无法理解规范。
有什么想法吗?
编辑:更让人困惑的是,我看到我们正在使用 DSMLv2 命名空间进行修改。我只是从 Active Roles SPML 服务文档的示例中提取了这个,所以我不知道 how/why 它是否有效。 SPML 规范确实提到了 DSML,但据我所知没有给出任何关于它的用法的上下文。它实际上可能是特定于供应商的实现。
解决了这个问题solution/work-around。
要在不知道其当前值的情况下删除属性,您可以简单地包含一个 'replace' 操作以首先设置一些任意值并将其包含在与 'delete' 操作相同的修改请求中。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:oasis:names:tc:SPML:2:0">
<soapenv:Header/>
<soapenv:Body>
<urn:modifyRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0">
<urn:psoID ID="CN=Some User,OU=User,OU=Accounts,DC=someorganisation,DC=org"/>
<urn:modification>
<modification name="telephoneNumber" operation="replace" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>deleteMe</value>
</modification>
<modification name="telephoneNumber" operation="delete" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>deleteMe</value>
</modification>
</urn:modification>
</urn:modifyRequest>
</soapenv:Body>
</soapenv:Envelope>
我需要通过对 Active Roles Server.
的 SPMLv2 SOAP 请求来维护 Active Directory 服务我正在尝试做一些表面上很简单的事情:从对象中删除 telephoneNumber 属性。我以前从未听说过 SPML,所以我花了一些时间试图了解 OASIS open standards.
列表中可用的规范如果值为 已知,我已经想出了如何做到这一点。例如,如果 telephoneNumber 属性与值“12345”匹配,下面的有效负载将删除它,但不会删除任何其他值。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:oasis:names:tc:SPML:2:0">
<soapenv:Header/>
<soapenv:Body>
<urn:modifyRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0">
<urn:psoID ID="CN=Some User,OU=User,OU=Accounts,DC=someorganisation,DC=org"/>
<urn:modification>
<modification name="telephoneNumber" operation="delete" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>12345</value>
</modification>
</urn:modification>
</urn:modifyRequest>
</soapenv:Body>
</soapenv:Envelope>
我想不通的是如何为未指定的值执行此操作,即在删除之前我不关心该值是什么,我只想删除它。我怀疑这与 SelectionType 有关,我只需要使用 'match anything' 选择器,但我无法理解规范。
有什么想法吗?
编辑:更让人困惑的是,我看到我们正在使用 DSMLv2 命名空间进行修改。我只是从 Active Roles SPML 服务文档的示例中提取了这个,所以我不知道 how/why 它是否有效。 SPML 规范确实提到了 DSML,但据我所知没有给出任何关于它的用法的上下文。它实际上可能是特定于供应商的实现。
解决了这个问题solution/work-around。
要在不知道其当前值的情况下删除属性,您可以简单地包含一个 'replace' 操作以首先设置一些任意值并将其包含在与 'delete' 操作相同的修改请求中。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn="urn:oasis:names:tc:SPML:2:0">
<soapenv:Header/>
<soapenv:Body>
<urn:modifyRequest xmlns:spml="urn:oasis:names:tc:SPML:2:0">
<urn:psoID ID="CN=Some User,OU=User,OU=Accounts,DC=someorganisation,DC=org"/>
<urn:modification>
<modification name="telephoneNumber" operation="replace" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>deleteMe</value>
</modification>
<modification name="telephoneNumber" operation="delete" xmlns="urn:oasis:names:tc:DSML:2:0:core">
<value>deleteMe</value>
</modification>
</urn:modification>
</urn:modifyRequest>
</soapenv:Body>
</soapenv:Envelope>