ユーザーに独自のコンテンツを公開して公開するにはどうすればよいですか?
質問
ユーザーに自分のコンテンツを公開して公開させたいと思います。デフォルトでは、ユーザーがコンテンツを公開または公開できるようにするには、「ノードを管理する」許可を与える必要があります。それは広範な方法です。ユーザーが作成した場合にのみ、ユーザーにノードを未発表または公開させたいと思います。これはまた、作成した場合にのみ、未発表のノードを表示できるはずです。
解決
いくつかのサイトで使用したUIアプローチは ノードオプションをオーバーライドします モジュールは、私の他の答えが提供するものと同様の権限に加えて、さらにエクストラを追加します。
他のヒント
私たちは常にを使用します コンテンツを公開します そのためのモジュール。多くのファイングレインの権限とノードに公開/未発表のタブを追加します。
このモジュール
- Granular Publishおよび未発表の許可を有効にします。
- グローバル(un/任意のコンテンツを公開)
- 「ノードタイプ」ごと(un/[nodeType]コンテンツを公開)
- ユーザーごと(un/publish own own [nodeType]コンテンツ
- 1つのクリックUN/Publishingを使用するために、ノードページに「公開/公開」タブを追加します。
- パブリッシュ/未発表のリンクを自分のビューに公開するため、レビュー担当者、編集者、出版社のワークフローを簡単に合理化できます。
- 軽量であり、常にそうです。
使用することをお勧めします 改訂モジュール これにより、上記の方法よりもいくつかの利点が与えられます。もちろん、それは完全に維持されているモジュールであるため、コードと多くのバグ修正に多くの目があることです。 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');
}
これにより、ユーザーが独自またはすべてのコンテンツタイプ、およびすべてのコンテンツタイプを公開/公開できるようにするいくつかの追加のアクセス許可が追加されます。
Decipher Answerを更新したいだけです。Drupal7に合わせて、別のモジュールを追加したくない場合は、魔女が最良のアプローチを縫います。
/**
* 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');
}
コンテンツアクセス モジュールはあなたが望むものをカバーする必要があります。
このモジュールを使用すると、役割と著者ごとにコンテンツタイプのアクセス許可を管理できます。各コンテンツタイプのアクセス許可を指定、編集、削除することができます。オプションで、コンテンツごとのアクセス設定を有効にすることができるため、各コンテンツノードのアクセスをカスタマイズできます。