Drupal 7中有没有办法防止管理员编辑节点?

时间:2012-12-11 21:15:55

标签: drupal drupal-7

我有一个以编程方式创建(和更新)Drupal 7节点的模块。

由于身体的内容是由程序以随机​​间隔改变的,所以我不希望任何人(包括管理员)能够编辑它们。有没有办法完全“关闭”允许管理员编辑节点的界面?

3 个答案:

答案 0 :(得分:2)

如果是具有管理员角色的标准用户,您可以在自定义模块中实施hook_node_access()

function MYMODULE_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;
  if ($type == 'the_type' && $op == 'update') {
    return NODE_ACCESS_DENY;
  }
  return NODE_ACCESS_IGNORE;
}

如果是“超级用户”(用户1),您需要获得更多创意,因为该用户会绕过大量访问权限检查。

您可以实施hook_menu_alter()来覆盖节点编辑页面的访问回调,并提供您自己的回调:

function MYMODULE_menu_alter(&$items) {
  $items['node/%node/edit']['access callback'] = 'MYMODULE_node_edit_form_access';
}

function MYMODULE_node_edit_form_access($node) {
  $type = is_string($node) ? $node : $node->type;
  if ($type == 'my_type') {
    return FALSE;
  } 
  return node_access('update', $node);
}

答案 1 :(得分:1)

我喜欢Clive的建议,但还有一个选择就是使用HOOK_form_alter简单地禁用字段。这也适用于用户1帐户。我最近使用它来禁用我不希望任何人修改的特定字段。

function YOURMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'your_form_id') {
    $form['body_field']['body']['#disabled'] = TRUE;
    $form['body_field']['body']['#value'] = $form['body_field']['body']['#default_value'];
  }
}

不可否认,如果你因为预告片而使用内置的身体字段,这个解决方案并不理想。但是,如果您想要禁用某些字段的编辑,同时保持节点的其他方面可编辑且页面完整,那么它的效果很好。

答案 2 :(得分:0)

我不确定为什么你需要他们成为管理员。老实说,这个角色应该留给绝对控制的人 - 甚至那些人也不应该把它当作他们的“主要”帐户,因为这可能会破坏事物。为什么不只是做一个“编辑”角色或类似的东西,并提供你需要的所有权限?