跳转到主要内容

Plone PAS补丁,用于删除编辑器和管理员的角色

项目描述

collective.droproles

这是一个针对PAS (PluggableAuthService)的猴子补丁。它在Plone站点上删除类似于管理员或编辑器的角色。编辑器仍然可以登录,但只有成员和认证角色。

它与collective.denyroles不同,后者完全拒绝具有这些角色之一的人的访问:他们无法登录。这种登录失败可能会令人困惑。我希望将我使用过此补丁的站点迁移到较新的collective.droproles

功能

  • 为各种用户类上的方法 getRolesgetRolesInContextallowed 提供补丁,返回原始列表,但删除以下角色:管理员、网站管理员、编辑器、审阅者、贡献者。这是临时的:不会进行数据库更改。

  • 通过环境变量 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 我们更改了补丁

  • getRolesgetRolesInContext 总是返回一个包含单个条目的列表:匿名

  • 当所需对象角色为 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 (22.4 kB 查看哈希值)

上传时间:

构建分布

collective.droproles-1.0.0-py2.py3-none-any.whl (19.7 kB 查看哈希值)

上传时间: Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面