2011-10-19 1 views
3

フォルダの新しいビューを作成しました(表形式に基づいています)。通常のビューアのタイトルと日付のみですが、ログインしたユーザー"編集者"の役割があった場合は、追加の列が表示されます。その列には、その特定の項目に対して「レビュー担当者」の役割を与えられたユーザーをリストする必要があります。たとえば、列は次のようになります。Plone 4:指定されたフォルダのレビュー担当者の役割をリストします

Title | Date | (Reviewers) 
Folder 1 | 10/04 | Johnny, Steve, Mary Sue 
Folder 2 | 10/13 | Sam, Betty, Johnny 

私が認証されたユーザーの役割に基づいて最終列を表示/非表示することができましたが、私は誰だけのユーザーを一覧表示する方法を見つけ出すように見えることはできませんレビューアへのアクセス権があります。私はsearchForMembers()を使ってみましたが、非常に遅いだけでなく、メンバーのリスト全体をエコーするか、サイト全体の役割に基づいて絞り込むことができますが、手動で行った人だけを取得する必要があります指定されたフォルダのレビュー担当者の役割ここで

は、列全体のコードです:

<td tal:define="is_manager python:test(here.portal_membership.getAuthenticatedMember().has_role('Manager'), 1, 0);" 
    tal:condition="is_manager"> 
    <tal:block tal:define="results python:item.portal_membership.searchForMembers(roles=['Member']);"> 
     <tal:block tal:condition="results" 
        tal:repeat="user results"> 
      <tal:block tal:define="fullname python:user.getProperty('fullname')"> 
       <span tal:replace="fullname">Full Name</span><span>, </span> 
      </tal:block> 
     </tal:block> 
    </tal:block> 
</td> 

私は役割= [「メンバー」]持っている場合には動作しますが、私はそれを変更した場合、「レビュー」は、私が何を取得する - 誰もがされていないので、私は思います特定の項目についてのみサイト全体のレビューアとして割り当てられます。私もさまざまな方法で.listMembers()を使ってみましたが、それは制限されているようで、ページテンプレートでは使用できません。これを回避する方法はありますか、これは最初のことについてこれを行う「間違った方法」ですか?

私は2日前、ほぼ同一の質問に答えました

答えて

3

List folders that a user has Reviewer access to in Plone 4

更新されたコードは次のようになります。

from Products.CMFCore.utils import getToolByName 

portal_url = getToolByName(context, "portal_url") 
portal = portal_url.getPortalObject() 
acl_users = portal.acl_users 

res = [] 

local_roles = acl_users._getLocalRolesForDisplay(context) 
for name, roles, rtype, rid in local_roles: 
    if 'Reviewer' in roles: 
     res.append((name,roles,rtype,rid)) 

を、私はこの種のを置くことをお勧めしたいです論理はファイルのpythonではなく、ページテンプレートにあります。

+0

私もその質問にお答えしました!私はプロセスを "逆"にして、リストフォルダではなく特定のアクセスレベルの人をリストする方法を知らなかった。ありがとう! – Heather

関連する問題