ユーザーが自分のコンテンツを非公開および公開できるようにするにはどうすればよいですか?


30

ユーザーが自分のコンテンツを非公開および公開できるようにします。デフォルトでは、ユーザーがコンテンツを非公開または公開できるようにするには、「ノードの管理」権限を付与する必要があります。しかし、それは広くする方法です。ノードを作成した場合にのみ、ユーザーがノードを非公開または公開できるようにします。これは、作成された場合にのみ、非公開ノードを表示できることも意味します。

回答:


20

一部のサイトで使用したUIのアプローチは、ノードオプションオーバーライドモジュールであり、他の回答が提供するものと同様の権限に加えて、追加の権限が追加されています。


これは最も単純なアプローチのようです...そして、それは現在私のために働いています。ありがとう!
ショーキー

ノードを管理せずにパブリッシュとスティッキーを許可できるため、これが最適です:)
Alex Weber

この問題に対処するのに最適なモジュールのようです。
zilverdistel

20

そのために、常にコンテンツ公開モジュールを使用します。多数のきめ細かいアクセス許可と、ノードに公開/非公開タブを追加します。

このモジュール

  • 詳細な公開および非公開のアクセス許可を有効にします。
    • グローバル(コンテンツの非公開/公開)
    • 「ノードタイプ」ごと([nodetype]コンテンツの非公開/公開)
    • ユーザーごと(独自の[nodetype]コンテンツを非公開/公開する
  • ワンクリックで「公開/非公開」タブをノードページに追加します。
  • ビューへの公開/非公開リンクを公開し、レビュー担当者、編集者、発行者のワークフローを簡単に合理化します。
  • 軽量で、常にそうです。

9

上記の方法に比べていくつかの利点があるリビジョンモジュールの使用をお勧めします。もちろん、それは完全に保守されたモジュールであるため、コードと多くのバグ修正に多くの目があります。2つ目は、これを全体的なワークフローに合わせるための機能が追加されます。

あなたのユースケースのために、彼らは基本的に自分のコンテンツを緩和することができますので、ユーザー「作成者」権限と「司会者」権限の両方を与えるが、モジュールの説明で述べているように、彼らはされていない「神のような与えるような力を与えられましたノードを管理します。


これは非常に興味深いオプションですが、必要な以上の方法があります。私はそれについて知っていることをうれしく思いますが、それが便利になる他のいくつかのサイトを考えることができます。
-Chaulky

6

これを行うモジュールがありますが、その名前はよく覚えていません。モジュールが取ったアプローチは面倒で、実際の重要なコードが実際には許可ロジックでラップされた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');
}

これにより、ユーザーが自分またはすべてのコンテンツタイプ、およびすべてのコンテンツタイプを公開/非公開できるようにするいくつかの追加のアクセス許可が追加され、希望する方法を設定できます。


ありがとう、それはかなりよさそうだ、理にかなっている。未公開のコンテンツを表示できるのはどうですか?表示できない場合、どのように公開しますか?
Chaulky

それに影響しないはずです。IIRCは、「管理ノード」があるかどうかに関係なく、未公開のコンテンツを見ることができます。
解読

3

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');
}

タイプミスがあります。$ perms_typeを$ perm_typesに変更します-加えて、any / ownステータスはチェックされません..
レミー

0

これは、フラグモジュールとルールモジュールの機能を組み合わせることで実現できます。

  1. 新しいFlag Publishを作成し、ユーザーに自分のコンテンツにのみフラグを立てる許可を与えます。
  2. 次に、ノードにフラグが付けられたときにトリガーされ、フラグが付けられたノードを公開する新しいルールを追加します。同様に、Publishでフラグが解除されているノードを非公開にする2番目のルールを作成します。
  3. 最後に、ユーザーに自分の非公開ノードを表示する権限を付与し、ノードのページに公開リンクを追加します。

-1

コンテンツアクセスモジュールは、あなたが欲しいものをカバーする必要があります。

このモジュールを使用すると、ロールおよび作成者ごとにコンテンツタイプの権限を管理できます。各コンテンツタイプのカスタムビューを指定、編集、および削除することができます。オプションで、コンテンツごとのアクセス設定を有効にできるため、各コンテンツノードのアクセスをカスタマイズできます。


1
あいまいな答えのビット。これがDecipherの答えよりも望ましい場合、このアプローチの利点について詳しく説明していただけますか?
クリスコーエン

コンテンツアクセスモジュールは、実際には問題を解決しません。役割ごとに表示、編集、削除を設定できますが、公開はできません。
解読
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.