Plone PAS补丁,用于删除编辑器和管理员的角色
项目描述
collective.droproles
这是一个针对PAS (PluggableAuthService)的猴子补丁。它在Plone站点上删除类似于管理员或编辑器的角色。编辑器仍然可以登录,但只有成员和认证角色。
它与collective.denyroles不同,后者完全拒绝具有这些角色之一的人的访问:他们无法登录。这种登录失败可能会令人困惑。我希望将我使用过此补丁的站点迁移到较新的collective.droproles。
功能
为各种用户类上的方法 getRoles、getRolesInContext 和 allowed 提供补丁,返回原始列表,但删除以下角色:管理员、网站管理员、编辑器、审阅者、贡献者。这是临时的:不会进行数据库更改。
通过环境变量 DROP_ROLES 进行配置。默认情况下我们不删除角色,但设置 DROP_ROLES=1 后,我们将删除它们。
用例
您有两个域的 Plone 网站
edit.example.local 用于编辑。具有编辑者或管理员角色的用户在此登录以编辑和管理网站。这是一个只能在您的本地网络或 VPN 中访问的本地域。
www.example.org 用于匿名用户,也许也用于没有额外角色的标准成员。此域名由一个特殊的防火墙保护,以防止常见的网络攻击,如可疑表单提交、请求洪水、垃圾邮件、跨站脚本攻击等。
问题
编辑者有时会登录到公共域,并在编辑时出现错误,因为防火墙过于防护。
系统管理员抱怨他已经设置了一个用于编辑和管理的特殊域,以便公共网站无法更改,但编辑者意外地可以通过公共网站登录并做出更改。
此包提供了将所有用户视为最多拥有成员或认证角色的选项。管理员可以登录,但不能进入 Plone 概览控制面板。
用户类别
以下类已被修改
AccessControl.users.BasicUser AccessControl.users.SimpleUser Products.PlonePAS.plugins.ufactory.PloneUser Products.PluggableAuthService.PropertiedUser.PropertiedUser
这包括标准 Plone。
我没有在来自其他来源的用户上进行测试,例如 LDAP。它可能默认情况下就可以工作。如果不起作用,并且您的 LDAP 用户具有特殊类,请尝试调用 patch_class(your_ldap_class)。
删除的角色
以下角色将被删除
Manager Site Administrator Editor Reviewer Contributor
如果您有其他想要删除的角色,您可能需要通过 monkey patch 将它添加到 USER_CLASSES 集合中。
另请参阅删除所有角色部分。
安装
通过将其添加到您的 buildout 中安装 collective.droproles
[buildout] ... eggs = collective.droproles [instance] recipe = plone.recipe.zope2instance environment-vars = DROP_ROLES 1
然后运行 bin/buildout。
如果没有环境变量,则不执行任何操作。
配置
您可以通过设置环境变量来删除角色
export DROP_ROLES=1
将其设置为 1(或其他正整数)表示是,设置为 0 表示否。其他值将被忽略。
请注意,在手动启动您的 Plone 实例或在 cronjob 中启动它时,操作系统环境可能不同。因此,最好在您的 Plone buildout.cfg 中设置此变量。
[instance] recipe = plone.recipe.zope2instance environment-vars = DROP_ROLES 1
运行 buildout,它将在 Plone 配置中设置,在这种情况下在 parts/instance/etc/zope.conf 中。
如果您有一个具有两个 zeoclients 的 ZEO 设置,其中一个是所有编辑器的流量,另一个是匿名访客,您可以这样做
编辑者的 zeoclient: DROP_ROLES 0
匿名访客的 zeoclient: DROP_ROLES 1
现在编辑者可以在他们的编辑环境中正常编辑。当他们意外登录到匿名环境时,他们将被视为没有额外角色的简单成员。
技术上,DROP_ROLES 0 不做任何事情,因为它是默认值。但指定可能更好。
删除所有角色
如果您想删除 所有 角色,您可以使用环境变量 DROP_ALL_ROLES
[instance] recipe = plone.recipe.zope2instance environment-vars = DROP_ALL_ROLES 1
在这种情况下,不再检查 DROP_ROLES 环境变量。
使用 DROP_ALL_ROLES 我们更改了补丁
getRoles 和 getRolesInContext 总是返回一个包含单个条目的列表:匿名。
当所需对象角色为 None 或包含匿名时,allowed 方法返回 True,否则返回 False。
您仍然可以登录,页面会显示您的名字,但您基本上无法进行任何更改。可能您可以使用 collective.easyform 来填写表单,但这可能是唯一能对数据库进行更改的操作。
这就是用例:防止对数据库进行所有(或大多数)更改。
建议的构建方式
这是如何在构建中正确添加的建议。请注意,这主要关注配置 collective.droproles,而忽略了大量其他有用的设置
[zeoclient] # Configuration for public zeoclient. recipe = plone.recipe.zope2instance http-address = 8080 zeo-client = on eggs = Plone collective.droproles # Environment variables shared by all zeoclients: base-environment-vars = zope_i18n_compile_mo_files true environment-vars = ${:base-environment-vars} # In the public zeoclient, we drop roles: DROP_ROLES 1 [zeoclient-cms] # Second Plone zeoclient, only used for CMS, so for editors. # The next weird line means: inherit all settings from the [zeoclient] section: <= zeoclient # Use a different port: http-address = 8090 environment-vars = ${:base-environment-vars} # In the CMS zeoclient, we do not want to drop roles: DROP_ROLES 0 [instance] # Standalone Plone instance without ZEO setup, for local development. <= zeoclient zeo-client = off environment-vars = ${:base-environment-vars} # With single instance, we do not want to drop roles: DROP_ROLES 0
ftw.upgrade
如果您使用 ftw.upgrade 中的 bin/upgrade 脚本,您将自动进行身份验证并获得管理员角色。但如果此脚本连接到上面的公共 zeoclient,管理员角色将被取消,使脚本变得无用。我们有一个补丁可以解决这个问题,当我们的其他补丁激活时,这个补丁也会激活。所以: bin/upgrade 应该能够正常工作。
注意:如果启用了 DROP_ALL_ROLES,则它将无法工作。
支持
如果您遇到问题,请告诉我们。请联系 Zest Software 的 Maurits van Rees,邮箱:m.van.rees@zestsoftware.nl。或者在 GitHub 上提交问题。
许可协议
该项目使用 GPLv2 许可。
贡献者
Maurits van Rees,邮箱:m.van.rees@zestsoftware.nl
变更日志
1.0.0 (2021-08-24)
看起来工作得很好,因此发布最终版本。 [maurits]
1.0.0b1 (2021-06-15)
初始发布。 [maurits]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。
源分布
构建分布
collective.droproles-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0b593a42bc238b24fd2a9a9e738a9c299f29046fb406ff8e4ed81f3f9e0bbaa7 |
|
MD5 | dbb3099acc6b4334ab97754ddd77fbd5 |
|
BLAKE2b-256 | 9d2dac982ca8a8913a1a3dfb7040a5c4226f03614800e74e098d4ec50f610b8c |
collective.droproles-1.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 120437a650609763c4c54ced8e58984632b8adc585198134b5c752c049ff754d |
|
MD5 | b01918ea3c60dd51468d14bc24101faf |
|
BLAKE2b-256 | e3bc653c8dba8fcce31029965e6b37a8cc16cdebcb26daf1fa46a51eba144992 |