我有带有LDAP的Plone 3,里面有很多组和用户。我想获取特定组的所有组成员。
groupe_id = "mygroup"
gtool = getToolByName(self, 'portal_groups')
group = gtool.getGroupById(groupe_id)
members = group.getAllGroupMembers()
在这里,成员总是返回[]
但实际上,我的组中确实有一些用户。
简短的回答可能是:你不能。
当您(或 Plone)向 ldap 询问用户列表时,ldap 可能会决定它找到太多结果,而是简单地返回一个基本上是空的列表。 因此,通常最好更改"用户和组"控制面板中的设置并打开"许多用户",也可能打开"许多组"。 例如,这可确保不显示"显示所有用户"按钮。
在 collective.setdefaulteditor 中,我通过使用 portal_membership.searchForMembers(login=char) 来解决这个问题,然后对 a、b 等进行 char 迭代
(顺便说一下,这不会搜索特定组中的成员。
这真的很丑,所以我希望有一个更好的答案,以便我可以更新这个工具。
我不了解 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')