4

所有権を変更する必要のあるコンテンツがあります。デフォルトでは、コンテンツタイプの所有者はコードからのadminですobj.getOwner()が、コンテンツタイプの作成者はadminではありません(例:someuser@samplemail.com)。

私はこのリンクをたどりました:http://developer.plone.org/content/ownership.htmlそしてコンテンツタイプのviewメソッドを作成しました。以下は私のコードスニペットです:

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

3 つの問題があります。

  • あなたはgetObject()繰り返し電話をかけます。これは比較的コストのかかる操作です。代わりに結果をローカル変数にキャッシュします。

    obj = brain.getObject()
    
  • setCreators()リストではなく、1 つの引数で呼び出しました。

    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 に答える