当该节点具有特定工作流状态时如何防止编辑该节点

Posted

技术标签:

【中文标题】当该节点具有特定工作流状态时如何防止编辑该节点【英文标题】:How preventing editing a node when this node has a specific workflow status 【发布时间】:2012-11-19 14:41:00 【问题描述】:

我使用 Drupal 7,当节点具有特定的工作流状态时,我想阻止为特定用户角色编辑某些节点。

例如,如果节点的工作流状态为“已验证”,则具有“贡献者”角色的用户无法对其进行编辑,但具有“验证者”角色的用户可以进行编辑。

如果工作流状态为“验证”,则两个用户角色都可以对其进行编辑。

是否可以通过“规则”和“工作流程”模块来实现这种流程?

【问题讨论】:

【参考方案1】:

您可能想要使用 hook_node_access($node, $op, $account)。在您的一个模块中创建此挂钩。要在编辑时拒绝访问,请先添加对 $op == "update" 的检查,然后添加您的验证逻辑。拒绝访问返回NODE_ACCESS_DENY,否则不返回任何内容或NODE_ACCESS_IGNORE

一个简单的例子如下:

function MYMODULE_node_access($node, $op, $account) 
  if (($op == "update") && ($node->type == "node_type_to_check")) 
    // Add your extra validation checks here
    // ...and if you then want to block access return the following
    return NODE_ACCESS_DENY;
  

你会发现更多关于hook_node_access()in the Drupal 7 API docs的信息。

警告:如果您以管理员用户(用户 1)身份登录,那么无论您的 hook_node_access() 规则如何,您都可以编辑节点,所以确保您使用“普通”用户进行测试。

【讨论】:

以上是关于当该节点具有特定工作流状态时如何防止编辑该节点的主要内容,如果未能解决你的问题,请参考以下文章

element-ui el-tree选择子节点时同时选择并提交父节点逻辑问题

如何通过按下按钮上的文本输入搜索此树视图中的特定节点?

如何防止 XState 节点在接收事件时重置其子并行状态?

C++ YAML:如何编辑/写入 .yaml 文件中的节点

如何防止 SKAction 序列在解码后重新启动?

如何关闭特定工作簿以响应接收具有特定标题的 Outlook 邮件?