Как добавить роль портала с помощью кода Python - PullRequest
3 голосов
/ 14 октября 2011

Я на Plone 4.1, и мне нужно создать роль портала по коду, и я не могу найти официальную ссылку.

После небольшого разговора я нашел это:

acl_users.portal_role_manager.addRole

Который, кажется, создает роль, но роль afaict нигде не доступна, ни на вкладке безопасности, ни в ролях, перечисленных в /@@usergroup-userprefs.

Затем я обнаружил также "_addRole" на объекте портала (который, я думаю, происходит от eggs / Zope2-2.13.8-py2.6.egg / OFS / role.py).

Я нашел использование этого в http://repositorio.interlegis.gov.br/ILSAAP/trunk/InstallUtils/installers/installRoles.py

и я сейчас использую

portal._addRole(new_role)
try:
    acl_users.portal_role_manager.addRole(new_role)
except:
    pass

это работает! :)

Реальный пример использования - это конкретный проект для трансмогрификатора:

https://github.com/simahawk/collective.blueprint.usersandgroups/blob/master/collective/blueprint/usersandgroups/blueprint.py#L62

Вопрос в том: это путь?

1 Ответ

2 голосов
/ 15 октября 2011

Роли хранятся локально в каждом объекте zodb, так что вы можете изменить таким образом

## Roles are store on __ac_roles__ attribute of object.
roles = list(portal.__ac_roles__)
roles += 'yournewrole'
portal.__ac_roles__ = tuple(roles)

Я думаю, этого достаточно для вашего варианта использования.

...