这主要是关于 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/