security - 控制对 future 内容的访问

标签 security authorization plone access-control

这主要是关于 future 的公共(public)内容,但不仅限于此。

在标准的 Plone 站点中,如果您创建的顶级内容未显示在导航中(仍然是私有(private)的),那么您将其公开(通过工作流)并显示在导航中,但稍后您会对其进行计时将来它会再次从导航中消失。

不过,到那时,如果匿名/登录用户知道 URL,他们将能够看到内容。

在我们的例子中,一份报纸,我们不仅有( future 的内容),而且我们还有不同的用户角色需要或不必看到该内容(付费订阅者/高级用户...... ).

检查View权限,即

security = getSecurityManager()
if security.checkPermission('View', obj):
   # user can see the object

还不够。

检查查看权限以及内容是否在未来,即

security = getSecurityManager()
if security.checkPermission('View', obj) and \
        not object.effective_date.isFuture():
   # user can see the object

再次是不够的,因为一些用户确实需要看到 future 的内容(即内容编辑器),而普通用户不应该看到他们,而且高级用户应该看到他们,所以这样的事情实际上可以做到:

security = getSecurityManager()
if security.checkPermission('View', obj) and \
        (not object.effective_date.isFuture() or 
         security.checkPermission('Can see future content', obj):
   # user can see the object

但接下来的问题是:因为必须在整个网站(引导页、文章、交叉链接、导航、搜索...)中使用它,所以感觉不对,而且必须重复所有操作非常乏味这会检查所有地方。

有没有其他方法可以解决这个问题?

最佳答案

有一个插件产品可以满足您的需求:

集体.wfeffectiverange

它的工作原理是添加一个 cron 作业来查找尚未发布( future 生效日期)或已过期(已达到到期日期)的内容,并在这种情况下应用工作流转换。

参见 https://pypi.python.org/pypi/collective.wfeffectiverange了解更多信息

关于security - 控制对 future 内容的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26992592/

相关文章:

c++ - 此 strncpy 存在哪些安全问题?

node.js - textarea 和 input HTML 元素之间的安全差异?

REST API 授权 header 或自定义 header ,如 X-ABC-Token

java - 使用 keycloak 实现授权,提取 RPT token 后如何将资源名称与 Controller 映射并取消用户授权

plone - 如何获取敏捷内容类型的图像并在批量 ListView 中显示?

plone - 某些 Zope 3 资源是否从 URL 中获取参数?

ios - 在 iOS 上使用安全框架的 SSL

java - 在 Java 5 中使用 AES 进行基于密码的加密(仅限 JCE)

laravel - 允许某些角色访问 Laravel Nova 仪表板?

plone - 支付宝版本冲突