这主要是关于未来的公共内容,但不仅如此。
在标准 Plone 站点中,如果您创建的顶级内容未显示在导航上(仍然是私有的),那么您将其公开(通过工作流程)并显示在导航上,但稍后您会在将来计时它再次从导航中消失。
不过,此时,如果匿名/登录用户知道 URL,他们将能够看到内容。
在我们的例子中,报纸,我们不仅有这样的内容(针对未来的内容),而且我们还有需要或不需要看到该内容的不同角色的用户(付费订阅者/高级用户......)。
检查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
再次是不够的,因为有些用户确实需要看到未来的内容(即内容编辑器),而普通用户不应该看到它们,而且高级用户应该看到它们,所以像这样的事情实际上会这样做:
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
但问题是:由于这必须在整个网站中使用(引导页、文章、交叉链接、导航、搜索...),因此感觉不正确,并且必须重复所有这些检查非常乏味。遍及各处。
还有其他方法可以解决这个问题吗?