2011-10-14 136 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