著者以外の「未公開コンテンツの表示」権限


18

ログインした(ただし管理者以外の)ユーザーに未公開コンテンツ(CSS node-unpublishedクラスでマーク)を表示する許可レベルの方法があるかどうかを少しグーグルで調べました。これは、Drupal 8のみでスケジュールされているようです。しかし、誰かが回避策をとるのに十分賢いのでしょうか?

作成Content Editor者であるかどうかに関係なく、すべての未公開コンテンツを表示できるという名前のロールがあります。

回答:


17

あなたがしている[OK]を、非常に小さなカスタムモジュールを書く場合は、の組み合わせを使用することができますhook_permission()し、hook_node_access()これを行うには:

function MYMODULE_permission() {
  return array(
    'unconditionally view unpublished content' => array(
      'title' => t('Unconditionally View Unpublished Content'),
      'restrict access' => TRUE
    )
  );
}

function MYMODULE_node_access($node, $op, $account) {
  // We're only bothered about the 'view' operation at the moment
  if ($op == 'view') {
    // If the user has access to our new permission, let 'em at it
    if (user_access('unconditionally view unpublished content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  // For everything else let the system decide.
  return NODE_ACCESS_IGNORE;
}

これで、新しいアクセス許可を割り当てるロールは、公開されているかどうかに関係なく、ノードを表示できるようになります。


&& user_access('administer nodes')コンテンツを作成する権利に依存するように追加しましたが、セキュリティを少し強化するために。今では「無条件」ではありません。例に感謝します!
アルトゥール

うん、少し「牛肉」にしたいかもしれないと言っていたはずです:)助けてくれて嬉しいです
クライブ

再び素晴らしいもの、クライヴ。これにより、私の問題の1つが解決され、特定の分類用語を持つノードへのアクセスが制限されます!!!
-uwe

1
コードは本当に「無条件にコンテンツを表示する」です。ノードが公開されているかどうかを確認することはありません。または、最初にコンテンツを表示する権限がロールにある場合。
JM01

6

最初に上記のコードを試しましたが、これは素晴らしいことです。しかし、ロールに未公開コンテンツに対する権限を付与した後、そのロールはビューで未公開コンテンツを表示できませんでした。これは一部の編集者ロールにとって非常に便利です...

モジュールview_unpublishedを使用して解決しました


このプラグインをインストールしましたが、問題を解決する代わりに、作成したカスタム管理グループのすべてのコンテンツが表示されないようにしました。
モハマドサラマ14

まあ、そのような振る舞いをしていたのが残念です。私はしばらくそれを使用してきましたが、そのようなpbをロールで使用したことはありません(管理者グループがロールである場合)。その後、DOで問題に投稿することができます。
古城14

3

このために改訂モジュールを使用します。インストール時に、コンテンツタイプごとに次の権限が作成されます。

  • コンテンツタイプ:自身のコンテンツの改訂を表示

  • コンテンツタイプ:誰のコンテンツの改訂版も表示

  • コンテンツタイプ:自身のコンテンツの改訂版を公開する

  • コンテンツタイプ:誰のコンテンツの改訂版も公開

編集者にコンテンツの改訂を表示する許可を与えることで、他のユーザーが作成または改訂したすべてのノードにアクセスして公開できます。


1

これは私が作ったものです...

各ノードタイプに対して「コンテンツの表示権限」を作成します。nodeモジュールの機能とほとんど同じですが、追加のオプションが追加されます。

/**
 * Implements hook_permission().
 */
function MODULE_permission() {
  $perms = array();
  foreach (node_permissions_get_configured_types() as $type) {
    $info = node_type_get_type($type);
    $perms += array(
      "view $type content" => array(
        'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
      )
    );
  }
  return $perms;
}

/**
 * Implements hook_node_access().
 */
function MODULE_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;

  if (in_array($type, node_permissions_get_configured_types())) {
    if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  return NODE_ACCESS_IGNORE;
}

1

そのためのDrupal 7およびDrupal 8のモジュールがあります。

View_unpublished

このモジュールを使用すると、特定のユーザーロールにアクセス権を付与して、特定のタイプの非公開ノードを表示できます。この点でアクセス制御は非常にきめ細かです。



0

シンプルで合理的な回避策は、ノードで「フロントページに昇格」フラグを使用することです。

このフラグを他に使用しない場合は、「フロントページに昇格」でビューをフィルタリングします。コンテンツエディターは、ノードが昇格される前に(直接リンクを使用して)ノードで作業できます。しかし、潜在的にサイト訪問者にはまだ表示されません。

YouTubeの「非公開動画」アプローチからインスピレーションを得ました。


0

ビューでコンテンツのみを表示する必要がある場合は、Views UIの下で無効にSQL rewritingします。Query SettingsOther

ユーザーに未公開コンテンツのフラグを解除できるようにしたいだけなので、これは私にとってはうまくいきます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.