Plone:如何更改原型内容的所有权?
我有一些内容需要更改它的拥有者。默认情况下,这些内容的拥有者是管理员,也就是通过代码 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 个回答
2
在 plone_utils
里,有一个叫 changeOwnershipOf(self, object, userid, recursive=0, REQUEST=None)
的助手函数,它可以帮你完成所有这些事情。
(你可以通过不太显眼的 change_ownership
表单找到它。)
3
你有没有看过 plone.app.changeownership 这个东西?
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
产品 可以帮你处理这些细节。