我有使用LDAP的Plone 3,我有很多组和用户。我想让特定小组的所有小组成员。
groupe_id = "mygroup"
gtool = getToolByName(self, 'portal_groups')
group = gtool.getGroupById(groupe_id)
members = group.getAllGroupMembers()
此处成员始终返回[]
但实际上,我的群组中确实有一些用户。
答案 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')