【发布时间】:2015-04-12 17:08:26
【问题描述】:
我在删除过程中使用以下代码:
public void delete(Person p) {
Name dn = buildDn(p);
ldapTemplate.unbind(dn);
}
但使用unbind() 方法,它会删除所有属性,但我只想从 LDAP 中删除特定属性,例如人的角色。
【问题讨论】:
标签: spring unbind spring-ldap
我在删除过程中使用以下代码:
public void delete(Person p) {
Name dn = buildDn(p);
ldapTemplate.unbind(dn);
}
但使用unbind() 方法,它会删除所有属性,但我只想从 LDAP 中删除特定属性,例如人的角色。
【问题讨论】:
标签: spring unbind spring-ldap
对于属性修改,您应该使用DirContextAdapter,如reference documentation 中所述。适用于您要求的部分是第 3.2.2 节(更新);要删除属性值,您应该使用removeAttributeValue。
【讨论】:
共有三种模式:
你应该使用 MOD_REPLACE
>>> mod_attrs = [ (ldap.MOD_DELETE, 'cn','Francis Bacon') ]
>>> l.modify_s('uid=francis,ou=users,dc=example,dc=com', mod_attrs)
(103, [])
>>>
这将从 cn 属性中仅删除属性值 Francis Bacon。如果不存在这样的值,则会引发 NO_SUCH_ATTRIBUTE 异常。否则,该值将被丢弃。
【讨论】:
如果您不知道字段值,则使用 None 作为这样的值(以@Anouar Mokhtari 为例):
mod_attrs = [ (ldap.MOD_DELETE, 'cn', None) ]
l.modify_s('uid=francis,ou=users,dc=example,dc=com', mod_attrs)
【讨论】: