我正在尝试使用Plone.Api方法(在Plone4中)从组中删除所有用户。 所以我写了这段代码:
users = api.user.get_users(groupname="The Test Group")
for user in users:
api.group.remove_user(groupname="The Test Group", username=user.id)
但是api.group.remove_user调用似乎没有起作用。在plone中从组中删除用户的正确方法是什么?
我在ipdb
内暂停了这个
这是我打电话的结果:
ipdb> api.group.get(groupname=group_name)
<GroupData at /Plone/portal_groupdata/groupname:61fbc50d623142d7887384d70f25358b used for /Plone/acl_users/source_groups>
到目前为止,我把它存储在一个变量中,所以我可以稍后再试一次(对于group参数)。
ipdb> grp = api.group.get(groupname=group_name)
ipdb> api.user.get_users(groupname=group_name)
[<MemberData at /Plone/portal_memberdata/stolas@domain.org used for /Plone/acl_users>]
我注意到我从该组中获取了我的用户。因此,我真的在这个群体中。
ipdb> user.id
'stolas@domain.org'
ipdb> api.group.remove_user(group=grp, username=user.id)
我再次尝试删除调用,并检查我的成员是否仍在该组中。
ipdb> api.user.get_users(groupname=group_name)
[<MemberData at /Plone/portal_memberdata/stolas@domain.org used for /Plone/acl_users>]
我还是.. 我应该重新索引安全性或类似的东西吗?
PS。
我还尝试了with api.env.adopt_roles(['Manager'])
getToolByName(getSite(), 'portal_groups')
方法portal_groups.removePrincipalFromGroup
everthing呈现为false。
答案 0 :(得分:1)
plone.api使用群组工具删除群组成员资格:
portal_groups = portal.get_tool('portal_groups')
portal_groups.removePrincipalFromGroup(user_id, group_id)
我猜您的api.user.get_users(groupname="The Test Group")
调用会返回一个空集。
因为您应该传递组名(组ID)。现在你传递组标题。
api.group.remove_user
也会接受组对象而不是组名。
Arguments ``groupname`` and ``group`` are mutually exclusive. You can
either set one or the other, but not both.
答案 1 :(得分:0)
由于我无法将其删除为用户,因此我想到了以下内容:
with api.env.adopt_roles(['Manager']):
api.user.delete(user=self.context)
parent = self.context.getParentNode()
parent.manage_delObjects([self.context.getId()])
由于用户删除可能失败,我将对象删除为Manager。这似乎没有搭便车。