2011-10-14 94 views
3

我在Plone的4.1和我需要创建通过代码门户的角色,我无法找到任何官方参考门户的作用。如何通过添加Python代码

后有点grepping的我发现这一点:

acl_users.portal_role_manager.addRole 

这似乎是创建角色,但角色AFAICT是不是可在任何地方,也不在安全选项卡,也不在/ @@所在的用户组中列出的角色-userprefs。

然后我发现也门户对象上的 “_addRole”(我认为来源于卵/ 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 

的作品! :)

使用真正的用例是transmogrifier具体的蓝图:

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

的问题是:这是要走的路?

+0

裸except子句看起来hoaky – sureshvv

回答

2

角色是商店localy每个ZODB对象,所以你可以修改这样的

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

我认为这是足以让你的使用情况。

+1

是的,我发现过,但我不知道它是做正确的事。它似乎更多的是一个适当的API :) – simahawk

+1

好吧!真实的API在OFS.role中定义,就像你说的和根据http://docs.zope.org/zope2/zdgbook/Security.html。之后,如果您希望您的角色可以在plone管理界面中管理(prefs _...),您必须添加portal_role_manager插件。为什么?因为你不想管理PMI接口的所有角色(例如每经理),或已开发一个插件,在未对ZODB存储方面提供动态的特定角色,你也想管理它(ILocalRolesPlugin或IRolesPlugin) – yboussard

+0

我看到,感谢和回答,最重要的是评论:) – simahawk