プログラムで Drupal 7 ノードを作成 (および更新) するモジュールがあります。
これらのノードの本体の内容は、プログラムによってランダムな間隔で変更されるため、管理者を含む誰もがそれらを編集できるようにしたくありません。管理者がノードを編集できるようにするインターフェイスを完全に「オフ」にする方法はありますか?
管理者ロールを持つ標準ユーザーの場合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);
}
Clive の提案はどちらも気に入っていますが、もう 1 つのオプションは、HOOK_form_alter を使用して単純にフィールドを無効にすることです。これは、User 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'];
}
}
確かに、ティーザーのために組み込みの body フィールドを使用している場合、このソリューションは理想的ではありません。ただし、特定のフィールドの編集を無効にし、ノードの他の側面を編集可能にしてページをそのまま残したい場合は、うまく機能します。
管理者になる必要がある理由がわかりません。正直なところ、その役割は絶対的な制御権を持つ人々のために確保されるべきであり、それらの人々でさえ、物事を破壊する可能性があるため、それを自分の「メイン」アカウントとして使用すべきではありません. 「編集者」ロールなどを作成して、必要なすべての権限を付与してみませんか?