【发布时间】:2014-11-18 10:56:54
【问题描述】:
这主要是关于未来的公共内容,但不仅如此。
在标准的 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
但问题是:因为这必须在整个网站中使用(引导页面、文章、交叉链接、导航、搜索......)感觉不对,而且必须重复所有内容非常乏味这会到处检查。
还有其他方法可以解决这个问题吗?
【问题讨论】:
标签: security authorization plone access-control