You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据Taxonomy Term值(如closed)禁止编辑Drupal节点?

实现Drupal节点按分类术语禁止编辑的方法

方法一:自定义代码实现

通过实现Drupal的hook_node_access钩子,直接在代码层面控制节点编辑权限:

  1. 新建一个自定义模块(例如命名为node_restrict_by_term),在模块的.module文件中添加以下代码:
function node_restrict_by_term_node_access(NodeInterface $node, $op, AccountInterface $account) {
  // 仅处理编辑操作
  if ($op !== 'update') {
    return AccessResult::neutral();
  }

  // 替换为你的分类字段机器名,比如field_node_status
  $target_field = 'field_node_status';
  if (!$node->hasField($target_field)) {
    return AccessResult::neutral();
  }

  // 获取节点关联的分类术语
  $terms = $node->get($target_field)->referencedEntities();
  foreach ($terms as $term) {
    // 检查术语名称或ID是否为closed(推荐用ID更稳定)
    if ($term->getName() === 'closed' || $term->id() === '123') { // 替换123为closed术语的实际ID
      return AccessResult::forbidden()->addCacheableDependency($node);
    }
  }

  return AccessResult::neutral();
}
  1. 替换代码中的字段机器名和术语ID为你站点的实际值,启用模块后,带有closed术语的节点将被禁止编辑。

方法二:使用Permissions by Term模块

通过现成模块可视化配置权限:

  • 安装并启用Permissions by Term模块
  • 进入后台的分类术语编辑页面,找到closed术语的编辑界面
  • 在页面的Permissions by Term设置区域,针对需要限制的角色,取消勾选「编辑拥有此术语的内容」权限
  • 保存设置后,拥有该术语的节点将被对应角色禁止编辑

注:若之前尝试Rule模块未成功,可能是触发条件或动作配置有误,比如需设置「在节点编辑表单加载前」触发,检查术语值后执行「拒绝访问」动作,但上述两种方法的可靠性和易用性更高。

内容的提问来源于stack exchange,提问作者Nadia chaklaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:48