TYPO3 - 用户尝试删除其有限语言的记录,但由于引用而无法执行此操作



我只找到了该主题的旧条目,所以我试图解释它:

我们有一个TYPO3 11.5.x,有8种语言,其中7种每晚通过DeepL翻译,只有德语是主要语言。这就是为什么我们将后端用户的语言限制为德语。对他们来说,这更容易掌握和维护。

但现在出现了一个巨大的问题。他们不能删除,复制&粘贴或剪切&粘贴德国纪录是因为";1:尝试在没有删除权限的情况下删除记录";。我理解这样做的原因,但另一方面,我们有权删除主要语言。翻译后的记录只是引用,应该可以删除。它有补丁、窍门或破解方法吗?如果有任何想法,我将不胜感激。

主语言与其翻译之间的引用是TYPO3中翻译的核心概念。因此,如果不允许编辑/删除其他语言,编辑可能永远无法删除主语言,因为这样一来,受限制的编辑就可以删除他/她无法访问的内容。

如果要分别处理主语言和翻译,则必须分别使用不同的语言将翻译后的内容元素创建为副本。但是您将无法再识别父元素。您必须实现自己的逻辑,才能知道哪个CE是哪些翻译的父级。

也可以在页面树中为每种语言设置一个分支,但不建议这样做。这样,您可以独立于其他分支更新每个分支的翻译。这也需要您实现一个自定义逻辑。

也许你也可以在工作空间中做到这一点。一个用于编辑内容,一个用于发布包括生成的翻译的内容。我不知道这个想法是否真的有效,因为我还从来没有用TYPO3真正建立过工作空间环境。

如果你必须通过"围绕";实现它可能不是最好的主意。

然而,如果你想看看这是否可能,你可以使用DataHandler钩子来解决这个问题

对于这些类型的事情,我建议使用调试器来了解TYPO3是如何在内部工作的。TYPO3使用考虑权限的DataHandler。

例如,在删除的情况下,您必须检查当前用户是否有权删除记录/页面,但忽略翻译的权限。

DataHandler::deleteAction中,钩子processCmdmap_deleteAction在删除之前被调用。到目前为止,一切都很好。但是,您必须自己在挂钩中检查权限,并负责翻译的删除。

(你可以看到,在DataHandler权限内总是被考虑的。要覆盖它,你必须自己处理很多功能。我不建议这样做。(

如果你不想让你的编辑篡改翻译,你可能可以用不同的方法来解决这个问题。

您是否可以作为系统管理员执行此操作?

在typep3conf/LocalConfiguration.php中,您可以添加用户id的1和2,例如:

'SYS' => [
'systemMaintainers' => [
1,
2,
],
],