【问题标题】:Plone traversing and forbidden Zope ids克隆遍历和禁止 Zope id
【发布时间】:2016-02-13 06:59:08
【问题描述】:

虽然您可以通过带有以 下划线 开头的 id 的代码内容生成,例如“_foo”,但您似乎无法遍历具有此特殊 id 的项目。 每次尝试使用浏览器访问以这种方式命名的内容都会导致 NotFound 错误。像 __bobotraverse____getitem__ 这样的方法都不会被调用,就像很早就检查了这个限制一样。

这个限制是如何起作用的,我该如何改变它?我可以访问 id 中带有前缀下划线的子对象吗?

【问题讨论】:

标签: plone zope


【解决方案1】:

在来自OFS.TraversableunrestrictedTraverse 实现中找到:

if name[0] == '_':
    # Never allowed in a URL.
    raise NotFound, name

...但这还不够。还有另一个检查类似于@Mathias 在ZPublisher.BaseRequest.DefaultPublishTraverse 中在publishTraverse 方法中通知的检查。

if name[:1]=='_':
    raise Forbidden("Object name begins with an underscore at: %s" % URL)

可悲的是,要覆盖它并不简单:

  • unrestrictedTraverse 在 Plone 站点上下文中被调用(所以我不能只为我的内容类型自定义它)
  • publishTraverse 方法归请求实现所有(也许为此我可以使用广告自定义发布遍历器?)

解决这个问题的最简单方法是通过monkeypatch。

【讨论】:

猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 2012-04-24
相关资源
最近更新 更多