Как вывести список всех групп, входящих в группу ldap?

У меня Plone 3 с LDAP, у меня в нем много групп и пользователей. Я хотел бы получить всех членов группы для определенной группы.

groupe_id = "mygroup"
gtool = getToolByName(self, 'portal_groups')
group = gtool.getGroupById(groupe_id)
members = group.getAllGroupMembers()

Здесь Members всегда возвращает [], но на самом деле в моей группе есть несколько пользователей.


person Jihaisse    schedule 16.11.2012    source источник


Ответы (2)


Краткий ответ может быть таким: вы не можете.

Когда вы (или Plone) запрашиваете у ldap список пользователей, ldap может решить, что находит слишком много результатов, и вместо этого просто возвращает пустой список. По этой причине обычно рекомендуется изменить настройки в панели управления «Пользователи и группы» и включить «многие пользователи» и, возможно, также «многие группы». Например, это гарантирует, что кнопка «Показать всех пользователей» не будет отображаться.

В collective.setdefaulteditor я обхожу это с помощью portal_membership.searchForMembers(login=char), а затем для итерации char по a, b и т. д.

(Кстати, это не ищет участников в определенной группе.)

Это действительно уродливо, поэтому я надеюсь на лучший ответ, чтобы обновить этот инструмент. :-)

person maurits    schedule 16.11.2012
comment
Это странно. Когда я использую LDAPBrowser, я могу просматривать всех членов любой группы... - person Jihaisse; 20.11.2012

Я не знаю о plone, но он основан на структуре posix, и вы можете легко это сделать.

import ldap

con = ldap.initialize('ldap://127.0.0.1')
con.simple_bind_s('cn=myuser', 'oh_yeah')
groups = con.search_s('dc=rkf,dc=org',
                      ldap.SCOPE_SUBTREE,
                      'objectclass=posixgroup',
                      ['memberuid'])

for a in groups:
    print 'Group:', a[0]
    print 'Members:', a[-1].get('memberuid')
person Pjl    schedule 15.05.2013