匿名ユーザーが特定のコンテンツタイプのノードを表示できないようにする方法はありますか?


9

匿名ユーザーがブロックやビューなどのコンテンツタイプのノードを表示できないようにする方法はありますか?

ビューでアクセスを制御できますが、ノードのリンクがわかっていれば、最初にログインしなくても表示できます。

回答:


10

フックhook_node_access()でノードへのアクセスを制御できます:

mymodule.module:

use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;

function mymodule_node_access(NodeInterface $node, $op, AccountInterface $account) {
  if ($account->isAnonymous() && $node->gettype() == 'article') {
    return AccessResult::forbidden()->cachePerPermissions();
  }
  return AccessResult::neutral()->cachePerPermissions();
}

これは、ビューへのアクセスではなく、ノードへの直接アクセスを制御します。しかし、これはおそらくあなたが望むものです。


ビュー内のアクセスも制御するには、hook_node_grantsを使用すると思います。
ジョナサン

4

あなたの最善の策は、ウサギの穴、または更新されたリリースがある場合はコンテンツアクセスを使用することです。

ウサギの巣穴

ウサギの穴は、エンティティが独自のページで表示されているときに何が起こるかを制御する機能を追加するモジュールです。カルーセルに表示される画像コンテンツタイプのように、独自のページに表示されるべきではないコンテンツタイプがある可能性があります。Rabbit Holeは、node / xxxを通じて、このノードが独自のページでアクセスできないようにすることができます。

コンテンツアクセス

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

あなたが望むのはコンテンツタイプのノードへのすべてのアクセスをブロックすることであることに注意してください-そして、コンテンツアクセスだけがラビットホールを介してそれを満たします。

それを超えて、あなたはこれらのどちらも適合しない場合にあなた自身のアクセス制御を実装することを検討していると思います。


回答を質問して申し訳ありませんが、Kevinですが、Groupモジュールに精通していますか?ビデオチュートリアルを見て、私が何を意味するのか理解してください...ところで:D7の場合は、「コンテンツアクセス」を推奨することもありました。
Pierre.Vriens

2
それはOGではなかったので。その意味で必要がない限り、インストールするのはちょっと重いですか?
ケビン

……OGだったから」?それはどういう意味ですか?そして「重い」について:あなたはOG(同意する場合)またはグループ(同意しない場合)ですか?
Pierre.Vriens

私はいつもグループがD8のOGのフォークだと思っていました
ケビン

申し訳ありませんが(もう一度)ケビン、そうではありません... 続きを読む
Pierre.Vriens 2017年

1

多分あなたはあなたのサイトにあなたのコンテンツとユーザーの任意のコレクションを作成することを可能にし、それらのコレクションへのアクセス制御パーミッションを付与することを可能にするGroupモジュールを使用する試みを与えたいと思うでしょう。D7以降で利用可能で、D8バージョンもあります。グループをエンティティとして作成し、完全にフィールド化、拡張、エクスポートできるようにします。すべてのグループには、ユーザー、ロール、およびアクセス許可を関連付けることができます(詳細については、「グループモジュールでサポートされるさまざまなロールとは?」を参照してください)。

この特定の質問では、gnodeサブモジュールを有効にし、グループタイプごとに、さまざまなコンテンツタイプに適切な権限(表示、編集、削除など)を定義します。

「メンバー」および「部外者」(=グループのメンバーではないログインユーザー)と呼ばれるグループへのアクセスを許可する必要があるようです。ただし、「匿名」(ログに記録されていないサイト訪問者)へのアクセスは許可しません。

資源


1

ノードビューのアクセス許可モジュールを使用できます。

これを有効にすると、「ノードビューの権限」セクションのパス「admin / people / permissions」で、どのコンテンツタイプを表示できるかをどのロールに割り当てることができます。

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