#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:
Вопрос в том, правильно ли это?
Комментарии:
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. Понятно, спасибо за ответ и, прежде всего, за комментарий 🙂