组中的Plone API remove_user似乎不起作用

时间:2014-11-05 10:16:06

标签: plone

我正在尝试使用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。

2 个答案:

答案 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。这似乎没有搭便车。