Plone 4:列出已在特定文件夹上获得Reviewer角色的成员

时间:2011-10-19 14:10:13

标签: plone

我为文件夹(基于表格视图)创建了一个新视图,这是常规查看者的唯一标题和日期,但如果登录用户具有“编辑”角色,则会显示一个附加列。该列需要列出已为该特定项目授予“审阅者”角色的用户。例如,列将是:

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

我已经能够根据经过身份验证的用户角色隐藏/显示最终列,但我似乎无法弄清楚如何仅列出具有审阅者访问权限的用户。我已经尝试过使用searchForMembers()了,但除了速度很慢之外,我只能让它回应整个会员列表,或者根据站点范围的角色进行缩小,但我需要得到的只是手动的人给予特定文件夹的Reviewer角色。

以下是整栏的代码:

<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(),但它似乎受限制,我不能在页面模板中使用它。有没有办法解决这个问题,或者这首先是“错误的方式”?

1 个答案:

答案 0 :(得分:3)

我在2天前回答了一个几乎相同的问题:

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中,而不是放在页面模板中。