我的内容需要更改其所有权。默认情况下,内容类型的所有者是来自代码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
我的代码似乎没有改变内容的所有权。所有者仍然是管理员,创作者仍然是原创作者。我的代码有问题吗?
答案 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)
答案 2 :(得分:2)
changeOwnershipOf(self, object, userid, recursive=0, REQUEST=None)
中有一个辅助函数plone_utils
可以为您完成所有这些操作。
(可通过曝光不足的change_ownership
形式查找。)