如何列出ldap组的所有组成员?

时间:2012-11-16 09:31:32

标签: ldap plone python-ldap

我有使用LDAP的Plone 3,我有很多组和用户。我想让特定小组的所有小组成员。

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

此处成员始终返回[]但实际上,我的群组中确实有一些用户。

2 个答案:

答案 0 :(得分:0)

简短的回答可能是:你做不到。

当你(或Plone)向ldap询问用户列表时,ldap可能会认为它找到了太多结果,而只是简单地返回一个空列表。出于这个原因,通常可以更改“用户和组”控制面板中的设置,并打开“多个用户”,也可以打开“多个组”。例如,这可以确保不显示“显示所有用户”按钮。

collective.setdefaulteditor中我通过使用portal_membership.searchForMembers(login = char)来解决这个问题,然后使用char迭代a,b,etcetera

(顺便说一句,这不会搜索特定组中的成员。)

这真的很难看,所以我希望有更好的答案,所以我可以更新这个工具。 : - )

答案 1 :(得分:0)

我不知道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')