如何改变原型内容的所有权?

2024-04-29 09:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有需要更改其所有权的内容。默认情况下,内容类型的所有者是admin,来自代码obj.getOwner(),但内容类型的创建者不是admin,例如。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

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


Tags: path代码selfobj类型内容admincontext
3条回答

我看到了三个问题:

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

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

    ^{2美元
  • 您不会更改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)
    

有一个^{} product为您处理所有这些细节。在

你看了plone.app.changeownership了吗?在

plone_utils中有一个帮助函数changeOwnershipOf(self, object, userid, recursive=0, REQUEST=None),它为您完成所有这些事情。在

(可通过未曝光change_ownership形式找到。)

相关问题 更多 >