权限不足:plone.app.multilingual [1.x] - 翻译原型内容

时间:2014-04-16 12:34:22

标签: python plone multilingual

如果我想用plone.app.multilingual翻译Archetype contenttype(例如Folder),我会有一个非常奇怪的行为。

错误消息:

Insufficient Privileges

You do not have sufficient privileges to view this page. If you believe you are 
receiving this message in error, contact the site administration.

我的环境:

  • Plone = 4.3.2
  • plone.app.multilingual = 1.2.1
  • plone.multilingual = 1.2.1
  • plone.multilingualbehavior = 1.2
  • archetypes.multilingual = 1.2
  • 大约有40个Plone Addon(,这使得这个非常复杂

我的用例:

  • 两种语言配置为EN和DE
  • 配置了Plone的simple_publication_workflow。
  • 所有商品均处于私人状态。 (LanguageRoot文件夹也处于私有状态)

我可以通过首先在网站的英文部分创建内容(文件夹)来重现此问题。内容是私有的,因为这是新内容的默认状态。

然后我尝试通过点击翻译菜单将内容翻译成德语 - > create German。完成...出现错误Insufficient Privileges

如果我安装一个香草Plone 4.3.2和plone.app.multilingial没有我的大量插件,一切正常。我很确定其中一个插件存在问题,但我需要了解导致此问题的原因。这并不重要,因为插件破坏了网站。

...进一步

由于它是一个权限问题,我首先尝试发布所有内容,然后将内容翻译成德语。这很好用!

好吧,下一步是调试到plone.app.multilingual。我最终进入add.py AddTraverser

问题出现在redirect on line 37如果网址的一部分不可公开访问(匿名??),则会发生错误。

不幸的是,DX部件和AT部件的实现是不同的。

我将AT部分实现更改为:

self.context.REQUEST.set('type', name)
view = queryMultiAdapter((self.context, self.context.REQUEST),
                             name="add_at_translation")
return view.__of__(self.context)

而不是:

baseUrl = self.context.absolute_url()
url = '%s/@@add_at_translation?type=%s' % (baseUrl, name)
return self.request.response.redirect(url)

这完全解决了我的情况。并且所有plone.app.multilingual测试仍然有效。

但我无法解释为什么? 为什么没有自定义它就无法工作?

任何提示都非常感谢!

1 个答案:

答案 0 :(得分:1)

为什么您的修复有效,可能与用户在遍历期间无法进行身份验证有关。这与用户在浏览器视图“__init__”中可能无法进行身份验证的原因类似。

这可能是一个错误,一个带有你的修复程序的pull请求,以及一个通过没有它来证明你的观点的测试,将是首选。

通过从/Plone/error_log中的过滤错误中删除Unauthorized(通过ZMI),您应该能够获得更好的错误消息。我不确定,absolute_url如何在任何条件下提出未经授权。