4

我有需要更改其所有权的内容。默认情况下,内容类型的所有者是管理员,来自代码,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

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

4

3 回答 3

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产品可以为您处理所有这些细节。

于 2013-03-01T15:06:32.737 回答
3

你看过plone.app.changeownership吗?

于 2013-03-01T08:57:12.803 回答
2

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

(可通过曝光不足的change_ownership表格找到。)

于 2014-02-27T07:23:53.353 回答