2015-04-12 2 views
0

Я использую следующий код для удаления процессакак удалить конкретный атрибут из LDAP с помощью пружинного Templete

public void delete(Person p) { 
    Name dn = buildDn(p); 
    ldapTemplate.unbind(dn); 

}

но используя отвязать(), он будет удалить все атрибуты, но я хочу удалить только конкретный атрибут из ldap, как роль человека.

Спасибо за помощь.

ответ

0

Для модификаций атрибутов вы должны использовать DirContextAdapter, как описано в reference documentation. Раздел, применимый к вашему требованию, будет раздел 3.2.2 (Обновление); для удаления значения атрибута вы должны использовать removeAttributeValue.

0

Есть три режима:

  • MOD_ADD: Это используется для добавления значения атрибута. Если атрибут уже существует (и схема разрешает несколько значений), добавляется новое значение , и старое значение останется.
  • MOD_DELETE: Значение атрибута будет удалено, если оно существует.
  • MOD_REPLACE: Указанные значения атрибута заменяют все остальные значения для этого имени атрибута. Другими словами, все старые значения для атрибута будут удалены, и это значение будет добавлено.

вы должны использовать MOD_REPLACE

>>> mod_attrs = [ (ldap.MOD_DELETE, 'cn','Francis Bacon') ] 
>>> l.modify_s('uid=francis,ou=users,dc=example,dc=com', mod_attrs) 
(103, []) 
>>> 

Это удалит только значение атрибута Фрэнсис Бэкон из атрибута сп. Если такого значения не существует, будет вызвано исключение NO_SUCH_ATTRIBUTE. В противном случае значение будет отброшено.

источник: https://www.packtpub.com/books/content/python-ldap-applications-part-3-more-ldap-operations-and-ldap-url-library

0

Если вы не знаете значения поля затем использовать в качестве значения None, как это (принимая пример @Anouar Мохтарей):

mod_attrs = [ (ldap.MOD_DELETE, 'cn', None) ] 
l.modify_s('uid=francis,ou=users,dc=example,dc=com', mod_attrs) 
Смежные вопросы