Plone 4: список участников, которым была назначена роль рецензента в определенной папке - PullRequest
3 голосов
/ 19 октября 2011

Я создал новое представление для папки (на основе табличного представления), единственное название и дата для обычных пользователей, но если вошедший в систему пользователь имел роль «Редактор», он показывает дополнительный столбец.В этом столбце должен быть указан список пользователей, которым была назначена роль «Рецензент».Например, столбцы будут иметь вид:

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>

Это работает, когда у меня есть role = ['Member'], но если я изменяю его на«Рецензент» я ничего не получаю - я думаю, потому что никто не назначен рецензентом для всего сайта, только для определенных элементов.Я также пытался использовать .listMembers () различными способами, но кажется, что это ограничено, и я не могу использовать его в шаблоне страницы.Есть ли способ обойти это, или это "неправильный путь", чтобы пойти об этом в первую очередь?

1 Ответ

3 голосов
/ 19 октября 2011

2 дня назад я ответил на почти идентичный вопрос:

Список папок, к которым у пользователя есть доступ Reviewer в 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, а не в шаблон страницы.

...