跳转到主要内容

GenericSetup处理程序,用于将Zope安全设置恢复为默认值

项目描述

警告:在使用此包之前,请备份您的ZODB!

Zope 2安全框架非常强大,其最大的优点之一就是它的灵活性。向网站管理员展示这种力量往往会导致他们获得足够的线索来陷入困境。这正是ZMI中的“安全”标签所做的事情。

在许多情况下,网站管理员或顾问面临着一项艰巨的任务,即恢复Zope对象层次结构中的所有安全设置,以恢复网站的正常和可预测性。collective.securitycleanup包提供了用于将角色映射和本地角色恢复到默认值的GenericSetup处理程序。此处理程序可以与现有处理程序结合使用,以设置角色映射并重新应用工作流安全设置,以帮助开始安全清理过程。

清理操作将应用于所有祖先,包括Zope应用程序根,并通过遍历层次结构到达所有后代。这意味着处理程序所使用的上下文的 所有后代以及包括根在内的所有祖先都将被清理。它不会清理兄弟姐妹或任何不是上下文直接祖先的内容。

清理操作将删除实例上存储的所有权限设置,从而将其恢复到代码默认值。清理操作还会删除所有本地角色,除非已经分配了由 OFS.interfasces.IOwned.getOwnerTuple() 返回的用户的“所有者”角色。如果对象是带有创建者字段的 CMF 内容,则创建者将与所有者同步。最后,如果上下文是 CMF 门户,则将更新整个门户的工作流程角色映射。

此工具的使用可能仅作为起点。因此,在使用之前,请务必彻底测试并备份您的 ZODB。

从修改后的安全设置开始

从一个 Zope 应用程序开始,其中一些角色的映射已从代码默认值更改。该应用程序还具有本地角色。

>>> app
<Application at >
>>> app.permission_settings('Modify portal content')[0]['acquire']
''
>>> app.rolesOfPermission('Modify portal content')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': 'SELECTED', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Owner'}]
>>> app.get_local_roles()
(('test_user_1_', ('Owner',)),)

应用程序包含一个文件夹,其中一些角色的映射未获取,并且已分配了角色,同样也有本地角色。

>>> app.folder
<Folder at /folder>
>>> app.folder.permission_settings(
...     'Add portal content')[0]['acquire']
''
>>> app.folder.rolesOfPermission('Add portal content')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': 'SELECTED', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Owner'}]
>>> app.folder.get_local_roles()
(('test_user_1_', ('Manager',)),)

该文件夹还包含一个 CMF 门户,将在其中应用设置处理程序。门户本身也更改了安全设置。

>>> portal
<CMFSite at /folder/cmf>
>>> portal.permission_settings(
...     'Review portal content')[0]['acquire']
''
>>> portal.rolesOfPermission('Review portal content')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Member'},
 {'selected': 'SELECTED', 'name': 'Owner'},
 {'selected': '', 'name': 'Reviewer'}]
>>> portal.get_local_roles()
(('portal_owner', ('Owner',)),
 ('test_user_1_', ('Member',)))

该门户还包含一个文件夹,其中包含一个文档,这两个都修改了安全设置。

>>> portal.folder
<PortalFolder at /folder/cmf/folder>
>>> portal.folder.permission_settings(
...     'Add portal folders')[0]['acquire']
''
>>> portal.folder.rolesOfPermission('Add portal folders')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Member'},
 {'selected': '', 'name': 'Owner'},
 {'selected': 'SELECTED', 'name': 'Reviewer'}]
>>> portal.folder.get_local_roles()
(('portal_owner', ('Owner',)),
 ('test_user_1_', ('Reviewer',)))
>>> portal.folder.document
<Document at /folder/cmf/folder/document>
>>> portal.folder.document.permission_settings(
...     'Copy or Move')[0]['acquire']
''
>>> portal.folder.document.rolesOfPermission('Copy or Move')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': 'SELECTED', 'name': 'Member'},
 {'selected': '', 'name': 'Owner'},
 {'selected': '', 'name': 'Reviewer'}]
>>> portal.folder.document.get_local_roles()
(('portal_owner', ('Owner',)),
 ('test_user_1_', ('Owner',)))
>>> portal.folder.document.listCreators()
('test_user_1_',)

运行处理程序

配置文件包含 collective.securitycleanup.txt 文件,表明应为此配置文件运行设置处理程序。

>>> import os
>>> from collective import securitycleanup
>>> os.path.exists(os.path.join(
...     os.path.dirname(securitycleanup.__file__),
...     "profiles", "default", "collective.securitycleanup.txt"))
True

导入配置文件。

>>> portal.portal_setup.runAllImportStepsFromProfile(
...     'profile-collective.securitycleanup:default')
{...collective.securitycleanup...

安全设置已恢复为默认值

现在,所有安全设置都已恢复到默认值,同时保留适当的所有者本地角色。

>>> app.permission_settings('Modify portal content')[0]['acquire']
''
>>> app.rolesOfPermission('Modify portal content')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Owner'}]
>>> app.get_local_roles()
()
>>> app.folder
<Folder at /folder>
>>> app.folder.permission_settings(
...     'Add portal content')[0]['acquire']
'CHECKED'
>>> app.folder.rolesOfPermission('Add portal content')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Owner'}]
>>> app.folder.get_local_roles()
()
>>> portal
<CMFSite at /folder/cmf>
>>> portal.permission_settings(
...     'Review portal content')[0]['acquire']
'CHECKED'
>>> portal.rolesOfPermission('Review portal content')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Member'},
 {'selected': '', 'name': 'Owner'},
 {'selected': '', 'name': 'Reviewer'}]
>>> portal.get_local_roles()
(('portal_owner', ('Owner',)),)
>>> portal.folder
<PortalFolder at /folder/cmf/folder>
>>> portal.folder.permission_settings(
...     'Add portal folders')[0]['acquire']
'CHECKED'
>>> portal.folder.rolesOfPermission('Add portal folders')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Member'},
 {'selected': '', 'name': 'Owner'},
 {'selected': '', 'name': 'Reviewer'}]
>>> portal.folder.get_local_roles()
(('portal_owner', ('Owner',)),)
>>> portal.folder.document
<Document at /folder/cmf/folder/document>
>>> portal.folder.document.permission_settings(
...     'Copy or Move')[0]['acquire']
'CHECKED'
>>> portal.folder.document.rolesOfPermission('Copy or Move')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Member'},
 {'selected': '', 'name': 'Owner'},
 {'selected': '', 'name': 'Reviewer'}]
>>> portal.folder.document.get_local_roles()
(('portal_owner', ('Owner',)),)
>>> portal.folder.document.listCreators()
('portal_owner',)
>>> portal.folder.document.rolesOfPermission('View')
[{'selected': '', 'name': 'Anonymous'},
 {'selected': '', 'name': 'Authenticated'},
 {'selected': 'SELECTED', 'name': 'Manager'},
 {'selected': '', 'name': 'Member'},
 {'selected': 'SELECTED', 'name': 'Owner'},
 {'selected': '', 'name': 'Reviewer'}]

变更日志

0.3 - 2009-01-29

  • 同步 CMF 创建者与 Zope 所有者

  • 更新 CMF 工作流程映射

0.2 - 2008-12-01

  • 文档修复

0.1 - 2008-11-30

  • 初始发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分布

collective.securitycleanup-0.3.tar.gz (8.8 kB 查看哈希值)

上传时间

由以下机构支持