TYPO3 - 用户试图用他有限的语言删除记录,由于引用而无法执行
TYPO3 - user tries to delete a record in his limited language, can't do it because of the references
我只找到了该主题的旧条目,所以我尝试对其进行解释:
我们有一个 TYPO3 11.5.x 有 8 种语言,其中 7 种每天晚上通过 DeepL 翻译,只有德语是主要语言。这就是为什么我们将后端用户的语言限制为德语。对他们来说更容易掌握和维护。
但是现在有个大问题。由于“1:尝试在没有删除权限的情况下删除记录”,他们无法删除、复制和粘贴或剪切和粘贴德国记录。我理解这样做的原因,但另一方面,有权删除主要语言。翻译的记录只是参考,应该可以删除。是否有补丁、技巧或破解方法?很乐意感谢任何想法。
您是否可以作为系统管理员执行此操作?
在 typo3conf/LocalConfiguration.php 中添加用户 ID 1 和 2 例如:
'SYS' => [
'systemMaintainers' => [
1,
2,
],
],
主要语言与其翻译之间的引用是TYPO3中翻译的核心概念。因此,如果不允许 edit/delete 其他语言,编辑者可能永远无法删除主要语言,因为那样的话,受限编辑者将能够删除 he/she 无法访问的内容。
如果您想分别处理主要语言和翻译,您必须将翻译后的内容元素创建为副本,分别使用不同的语言。但是您将无法再识别父元素。您必须实现自己的逻辑才能知道哪个 CE 是哪些翻译的父级。
也可以(但不推荐)在页面树中为每种语言创建一个分支。这样您就可以独立于其他分支更新每个分支的翻译。这也需要您实现自定义逻辑。
也许您也可以使用工作区来完成。一种用于编辑内容,一种用于发布包括生成的翻译在内的内容。我不知道这个想法是否真的有效,因为我还没有真正使用 TYPO3 设置工作区环境。
如果您必须通过“绕过”实现来完成某些事情,那可能不是最好的主意。
但是,如果您想看看是否可行,您可以使用 DataHandler 挂钩解决此问题,
对于这些类型的事情,我建议使用调试器逐步了解 TYPO3 的内部工作原理。 TYPO3使用了考虑权限的DataHandler。
例如,对于删除的情况,您必须检查当前用户是否有权删除记录/页面/页面,但忽略翻译权限。
在 DataHandler::deleteAction
中,钩子 processCmdmap_deleteAction
在删除之前被调用。到目前为止,一切都很好。但是你必须自己检查挂钩中的权限和注意翻译的删除。
(您可以看到在 DataHandler 中始终考虑权限。要覆盖它,您必须自己处理很多功能。我不推荐这样做。)
如果您不想让您的编辑篡改翻译,您或许可以采用不同的解决方法。
我只找到了该主题的旧条目,所以我尝试对其进行解释:
我们有一个 TYPO3 11.5.x 有 8 种语言,其中 7 种每天晚上通过 DeepL 翻译,只有德语是主要语言。这就是为什么我们将后端用户的语言限制为德语。对他们来说更容易掌握和维护。
但是现在有个大问题。由于“1:尝试在没有删除权限的情况下删除记录”,他们无法删除、复制和粘贴或剪切和粘贴德国记录。我理解这样做的原因,但另一方面,有权删除主要语言。翻译的记录只是参考,应该可以删除。是否有补丁、技巧或破解方法?很乐意感谢任何想法。
您是否可以作为系统管理员执行此操作?
在 typo3conf/LocalConfiguration.php 中添加用户 ID 1 和 2 例如:
'SYS' => [
'systemMaintainers' => [
1,
2,
],
],
主要语言与其翻译之间的引用是TYPO3中翻译的核心概念。因此,如果不允许 edit/delete 其他语言,编辑者可能永远无法删除主要语言,因为那样的话,受限编辑者将能够删除 he/she 无法访问的内容。
如果您想分别处理主要语言和翻译,您必须将翻译后的内容元素创建为副本,分别使用不同的语言。但是您将无法再识别父元素。您必须实现自己的逻辑才能知道哪个 CE 是哪些翻译的父级。
也可以(但不推荐)在页面树中为每种语言创建一个分支。这样您就可以独立于其他分支更新每个分支的翻译。这也需要您实现自定义逻辑。
也许您也可以使用工作区来完成。一种用于编辑内容,一种用于发布包括生成的翻译在内的内容。我不知道这个想法是否真的有效,因为我还没有真正使用 TYPO3 设置工作区环境。
如果您必须通过“绕过”实现来完成某些事情,那可能不是最好的主意。
但是,如果您想看看是否可行,您可以使用 DataHandler 挂钩解决此问题,
对于这些类型的事情,我建议使用调试器逐步了解 TYPO3 的内部工作原理。 TYPO3使用了考虑权限的DataHandler。
例如,对于删除的情况,您必须检查当前用户是否有权删除记录/页面/页面,但忽略翻译权限。
在 DataHandler::deleteAction
中,钩子 processCmdmap_deleteAction
在删除之前被调用。到目前为止,一切都很好。但是你必须自己检查挂钩中的权限和注意翻译的删除。
(您可以看到在 DataHandler 中始终考虑权限。要覆盖它,您必须自己处理很多功能。我不推荐这样做。)
如果您不想让您的编辑篡改翻译,您或许可以采用不同的解决方法。