Plone:如何更改原型内容的所有权?

时间:2013-03-01 06:45:48

标签: python plone archetypes

我的内容需要更改其所有权。默认情况下,内容类型的所有者是来自代码obj.getOwner()的管理员,但内容类型的创建者不是管理员,例如someuser@samplemail.com。

我已关注此链接:http://developer.plone.org/content/ownership.html并为内容类型创建了一个视图方法。以下是我的代码片段:

def change_owner(self):
    membership = getToolByName(self.context,'portal_membership')
    path='/'.join(self.context.getPhysicalPath())
    brains=self.portal_catalog.searchResults(path={'query':path,'depth':0})
    for brain in brains:
        creator = brain.Creator
        crtor_obj = membership.getMemberById(crtor1).getUser()
        brain.getObject().setCreators(creator,)
        brain.getObject().changeOwnership(crtor_obj)
        brain.getObject().reindexObjectSecurity()
    return

我的代码似乎没有改变内容的所有权。所有者仍然是管理员,创作者仍然是原创作者。我的代码有问题吗?

3 个答案:

答案 0 :(得分:4)

我看到三个问题:

  • 您反复拨打getObject()。这是一个相对昂贵的操作,将结果缓存在局部变量中:

    obj = brain.getObject()
    
  • 您使用一个参数调用setCreators(),而不是列表:

    obj.setCreators([creator])
    
  • 您不会更改Owner角色:

    roles = list(obj.get_local_roles_for_userid(crtor_obj))
    if 'Owner' not in roles:
        roles.append('Owner')
        obj.manage_setLocalRoles(crtor_obj, roles)
    

有一个plone.app.changeownership product可以为您处理所有这些细节。

答案 1 :(得分:3)

你看过plone.app.changeownership吗?

答案 2 :(得分:2)

changeOwnershipOf(self, object, userid, recursive=0, REQUEST=None)中有一个辅助函数plone_utils可以为您完成所有这些操作。

(可通过曝光不足的change_ownership形式查找。)