2013-03-01 45 views
3

我有需要改變其所有權的內容。默認情況下,內容類型的所有者是admin,來自代碼obj.getOwner(),但內容類型的創建者不是管理員,例如, [email protected]Plone:如何更改原型內容的所有權?

我跟隨此鏈接: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

我看到三個問題:

  • 你重複調用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爲您處理所有這些細節。

+0

非常感謝,我現在能夠改變內容的所有權。 – user1225163 2013-03-05 15:52:52

1

有一個幫手功能changeOwnershipOf(self, object, userid, recursive=0, REQUEST=None)plone_utils,爲您做所有這些事情。

(通過曝光不足change_ownership形式瑪麗薩。)