【问题标题】:What is the best way to create a Plone private site创建 Plone 私人网站的最佳方法是什么
【发布时间】:2011-06-18 14:28:54
【问题描述】:

我想了解每一种解决方案,并只保留最好的一种,以“对每个匿名用户关闭网站”。匿名用户应该只有登录表单。

现有方式:

  • 使用 zope 安全性(在根 plonesite 上删除匿名查看权限)
  • 使用工作流(更改已发布状态的安全映射)
  • 通过 http auth 在代理中使用 apache

还有其他解决方案吗?什么是最好的?

注意:我在尝试使用 zope security 时遇到了一个问题,即使登录表单无法访问,所以请详细说明实现此目的的方法。

【问题讨论】:

  • 如果您使用 zope 安全和工作流程,您不能创建一个名为“login”的页面来覆盖默认安全设置,然后将默认视图设置为“login_form”吗?这样一来,匿名用户可以访问网站上的一个地方,它会显示登录表单....

标签: plone


【解决方案1】:

我会使用http://pypi.python.org/pypi/iw.rejectanonymous。它为 Plone 站点添加了一个自定义遍历钩子,并且只允许匿名用户访问登录表单及其使用的资源。

请记住,在这种情况下,您无法在前端缓存中缓存任何页面或列表,因为无需身份验证即可访问它们。在 Varnish 中缓存 CSS、JS 和图像资源仍然是一个好主意,您可以将内容缓存在浏览器缓存中。

【讨论】:

    【解决方案2】:

    我处理这个用例的方法一直是(现在仍然是)处理工作流。

    开始自定义“Intranet 工作流程”,然后删除所有匿名选项。 然后授予您想要的经过身份验证的(或成员)特权。

    不需要额外的代码。 不需要额外的产品。 无需外部配置。

    只有 Plone 的力量。

    【讨论】:

    • +1。但事实证明,这只有在您有一个对象用作根对象的默认视图时才有效。
    • 确实,但是……我想这是非常小的缺点。谢谢加分。
    • 是的,我通过创建一个显示文件夹中所有内容的集合来解决这个问题,并将其用作默认视图。愚蠢,但有效。
    【解决方案3】:

    我曾经保护了一个 Plone 站点,以便只有经过身份验证的用户才能看到任何内容(登录表单 是可访问的)。这是一个 Plone 2.5,我知道我在 Plone Site root 的访问 ZMI 页面(manage_access)中修改了(选中/未选中角色)这些权限:

    • 添加门户成员
    • 允许发送到
    • 更改门户事件
    • 修改门户内容
    • 设置自己的密码
    • 设置自己的属性
    • 查看

    我知道在下一个 Plone 版本中添加了新权限,因此您可能需要调整其他权限。

    我认为实现您需要的最简单的方法是这样做,尽管我建议使用 GenericSetup 而不是 TTW 自定义,就像我做的那样:

    • 这比修改工作流的已发布状态更容易。
    • 如果您配置 Apache,您将需要双重登录(访问登录表单,然后登录到 Plone)。除非你设置了一个特殊的 PAS 插件。在我看来,这种方法比我的更难。

    但鉴于我没有尝试过这最后两个选项中的任何一个,我不能说我的方式是 方式。我只能说它对我有用,希望它对你有用。

    【讨论】:

      【解决方案4】:

      您还可以使用 WebServerAuth 插件,这样用户只能通过基本身份验证进行访问。 http://plone.org/products/webserverauth

      这样您就可以在默认情况下保护网站上的所有内容,而不必担心克隆登录表单。

      【讨论】:

        【解决方案5】:

        如果您已经在使用 Apache 运行虚拟主机,那么我会使用 mod_rewrite 来强制执行此操作。以下配置会将所有未经身份验证的用户引导到登录表单,并允许用户使用忘记密码的过程。我已经用 Plone 4.1 测试过了,我想它也可以和 Plone 4.0 一起使用

        RewriteCond %{HTTP_COOKIE} !__ac=.*
        RewriteCond %{REQUEST_URI} !^/acl_users/credentials_cookie_auth/require_login$
        RewriteCond %{REQUEST_URI} !/login_form$
        RewriteCond %{REQUEST_URI} !/login$
        RewriteCond %{REQUEST_URI} !/logged_out$
        RewriteCond %{REQUEST_URI} !^/portal_css/
        RewriteCond %{REQUEST_URI} !^/portal_javascripts/
        RewriteCond %{REQUEST_URI} !^/login.js$
        RewriteCond %{REQUEST_URI} !^/logo.png$
        RewriteCond %{REQUEST_URI} !^/mail_password_form$
        RewriteCond %{REQUEST_URI} !^/mail_password$
        RewriteCond %{REQUEST_URI} !^/portal_registration/passwordreset/
        RewriteCond %{REQUEST_URI} !^/pwreset_form$
        RewriteCond %{REQUEST_URI} !^/pwreset_finish$
        RewriteRule ^(.*) /acl_users/credentials_cookie_auth/require_login?came_from=%{REQUEST_URI} [last,redirect=temp]
        

        【讨论】:

        • 这并不安全 - 访问者可以将他们的 __ac cookie 设置为任意值。
        • OK 一点也不安全。我们将它用于我们有公共 url 和编辑 url 的网站,所以这并不重要。即使有人为编辑站点设置了自己的 __ac cookie,他们也只能看到可以通过公共站点访问的内容
        • 这确实是这里最糟糕的解决方案
        • 但是有很多 plone 后门 url 的列表 :) 我们还发现了 /failsafe_login_form... 还有更多吗?
        猜你喜欢
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 2010-09-09
        • 2017-08-06
        • 2019-11-18
        相关资源
        最近更新 更多