как добавить роль портала с помощью кода python

#plone #roles

#plone #роли

Вопрос:

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

После небольшого поиска я нашел это:

 acl_users.portal_role_manager.addRole
  

Который, кажется, создает роль, но значение роли недоступно нигде, ни на вкладке безопасность, ни в ролях, перечисленных в /@@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
  

это работает! 🙂

Вариант использования use real — это конкретный план для transmogrifier:

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

Вопрос в том, правильно ли это?

Комментарии:

1. предложение naked except выглядит фальшиво

Ответ №1:

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

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

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

Комментарии:

1. да, я тоже это нашел, но я не знал, правильно ли это делать. Это больше похоже на взлом, чем на правильный API 🙂

2. Хорошо! Реальный API определен в OFS. роль, как вы говорите, и в соответствии docs.zope.org/zope2/zdgbook/Security.html . После, если вы хотите, чтобы вашей ролью можно было управлять в интерфейсе управления plone (prefs_ …), вы должны добавить плагин portal_role_manager. Почему ? поскольку вы не хотите управлять всеми ролями в интерфейсе PMI (для каждого примера менеджера) или у вас есть плагин, который предоставляет динамическую специфическую роль в контексте, которые не хранятся в zodb, и вы также хотите управлять им (ILocalRolesPlugin или IRolesPlugin)

3. Понятно, спасибо за ответ и, прежде всего, за комментарий 🙂