回答:
上記の方法に比べていくつかの利点があるリビジョンモジュールの使用をお勧めします。もちろん、それは完全に保守されたモジュールであるため、コードと多くのバグ修正に多くの目があります。2つ目は、これを全体的なワークフローに合わせるための機能が追加されます。
あなたのユースケースのために、彼らは基本的に自分のコンテンツを緩和することができますので、ユーザー「作成者」権限と「司会者」権限の両方を与えるが、モジュールの説明で述べているように、彼らはされていない「神のような与えるような力を与えられましたノードを管理します。
これを行うモジュールがありますが、その名前はよく覚えていません。モジュールが取ったアプローチは面倒で、実際の重要なコードが実際には許可ロジックでラップされた1行だけであるときに多くのコードが含まれていると感じました。
これは私のバージョンのコードです:
function MYMODULE_perm() {
$perms[] = 'administer status of any content';
foreach (node_get_types() as $type) {
if (isset($type->type)) {
$perms[] = 'administer status of any '. check_plain($type->type) .' content';
$perms[] = 'administer status of own '. check_plain($type->type) .' content';
}
}
return $perms;
}
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
if ($form['options']['#access'] == FALSE) {
$form['options']['#access'] = TRUE;
}
}
}
function _MYMODULE_access($type) {
return user_access('administer status of any content')
|| user_access('administer status of any ' . check_plain($type) . ' content')
|| user_access('administer status of own ' . check_plain($type) . ' content');
}
これにより、ユーザーが自分またはすべてのコンテンツタイプ、およびすべてのコンテンツタイプを公開/非公開できるようにするいくつかの追加のアクセス許可が追加され、希望する方法を設定できます。
Drupal 7に合うように、別のモジュールを追加したくない場合は、Decipherの回答を更新します。
/**
* Implements hook_permission().
*/
function MYMODULE_permission() {
$perms = array(
'administer status of any content' => array(
'title' => t('Administer status for all content type'),
'description' => t(''),
'restrict access' => true
),
);
foreach (node_type_get_types() as $type) {
if (isset($type->type)) {
$perm_types = array(
'administer status of any '. check_plain($type->type) .' content' => array(
'title' => t('Administer status of any '. check_plain($type->type) .' content'),
'description' => t(''),
),
'administer status of own '. check_plain($type->type) .' content' => array(
'title' => t('Administer status of own '. check_plain($type->type) .' content'),
'description' => t(''),
),
);
$perms = array_merge($perms,$perm_types);
}
}
return $perms;
}
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
if ($form['options']['#access'] == FALSE) {
$form['options']['#access'] = TRUE;
}
}
}
function _MYMODULE_access($type) {
return user_access('administer status of any content')
|| user_access('administer status of any ' . check_plain($type) . ' content')
|| user_access('administer status of own ' . check_plain($type) . ' content');
}
コンテンツアクセスモジュールは、あなたが欲しいものをカバーする必要があります。
このモジュールを使用すると、ロールおよび作成者ごとにコンテンツタイプの権限を管理できます。各コンテンツタイプのカスタムビューを指定、編集、および削除することができます。オプションで、コンテンツごとのアクセス設定を有効にできるため、各コンテンツノードのアクセスをカスタマイズできます。