我在Workbench访问问题队列中发现了这种情况:https://www.drupal.org/project/workbench_访问/问题/2982941#评论-12670744
似乎我需要停用translate *bundle* *node*权限,因为如果设置了这些权限,权限就会短路,其他访问限制也不会适用,并自行创建一堆新的*translate *bundle* *node* *language*权限。在我的例子中,我们有15种节点类型和6种语言。这将导致90个新权限。这是压倒性的。
我试图将Drupal管理部分中节点的创建和编辑权限限制为用户只使用一种语言。我没有找到提供此功能的模块。Is有任何这样做的模块吗?
然后我尝试创建自己的模块。我想出了一个解决方案
getRoles();
if (in_array('administrator', $roles)) {
return AccessResult::neutral();
}
if ($op !== 'update' && $op !== 'delete') {
return AccessResult::neutral();
}
// Access should be restricted only if this permission is set
if (!$account->hasPermission('custom_i18n_access_restrict')) {
return AccessResult::neutral();
}
$current_language = \Drupal::languageManager()->getCurrentLanguage();
$lang = $current_language->getId();
if ($account->hasPermission("custom_i18n_access_{$lang}_allow")) {
return AccessResult::neutral();
}
return AccessResult::forbidden();
}custom_i18n_access.permissions.yml文件:
getLanguages();
$permissions["custom_i18n_access_restrict"] = [
'title' => t("Restrict language access"),
'description' => 'Restrict the edit access of nodes',
];
foreach($languages as $lang) {
$permissions["custom_i18n_access_{$lang->getId()}_allow"] = [
'title' => t("Allow to edit @lang content", ['@lang' => $lang->getName()]),
];
}
return $permissions;
}
} 此自定义模块成功地将现有内容的编辑和删除限制为仅限于权限中指定的语言。但是它并不阻止新的将内容翻译成其他语言。
在我看来,并不是在翻译子任务页面上为每种语言调用HOOK_node_access钩子。我如何做到这一点?Is有一个不同的钩子吗?我没有在网上找到任何帮助。
发布于 2020-07-08 20:22:43
我建议在这里检查NodeTranslationHandler类,在entityFormAlter中,您可以找到一种方法来限制用户创建新的翻译。
https://drupal.stackexchange.com/questions/295037
复制相似问题