匿名ユーザーがブロックやビューなどのコンテンツタイプのノードを表示できないようにする方法はありますか?
ビューでアクセスを制御できますが、ノードのリンクがわかっている場合は、最初にログインしなくても表示できます。
フックでノードへのアクセスを制御できます 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();
}
これは、ビューへのアクセスではなく、ノードへの直接アクセスを制御します。しかし、これはおそらくあなたが望むものです。
あなたの最善の策は、更新されたリリースがある場合は Rabbit Hole 、または Content Access を使用することです。
ウサギの穴は、エンティティが独自のページで表示されているときに何が起こるかを制御する機能を追加するモジュールです。カルーセルに表示される画像コンテンツタイプのように、独自のページに表示されるべきではないコンテンツタイプがある可能性があります。 Rabbit Holeは、node/xxxを介して、このノードが独自のページでアクセスできないようにすることができます。
このモジュールを使用すると、ロールおよび作成者ごとにコンテンツタイプの権限を管理できます。これにより、各コンテンツタイプのカスタム表示、編集、および削除権限を指定できます。オプションで、コンテンツごとのアクセス設定を有効にして、各コンテンツノードのアクセスをカスタマイズできます。
私が信じるあなたが望むことは、allアクセスをブロックすることに注意してくださいコンテンツタイプのノード-そして、コンテンツアクセスのみがラビットホールを介してそれを実行します。
それを超えて、あなたはこれらのどちらも適合しない場合、あなた自身のアクセス制御の実装を検討していると思います。
Node View Permissions モジュールを使用できます。
これを有効にすると、「ノードビューの権限」セクションのパス「admin/people/permissions」で、どのコンテンツタイプを表示できるかをどのロールに割り当てることができます。
Group モジュールを使用して、サイト上のコンテンツとユーザーの任意のコレクションを作成し、それらのコレクションにアクセス制御権限を付与することをお勧めします。 D7以降で利用可能で、D8バージョンもあります。グループをエンティティとして作成し、完全にフィールド化、拡張、エクスポートできるようにします。すべてのグループには、ユーザー、ロール、およびアクセス許可を関連付けることができます(詳細については、「 Groupモジュールでサポートされるさまざまなロールは何ですか? を参照してください)。
この特定の質問では、gnode
サブモジュールを有効にし、グループタイプごとに、さまざまなコンテンツタイプに適切な権限(表示、編集、削除など)を定義します。
「メンバー」と「部外者」(=グループのメンバーではないログインユーザー)と呼ばれるグループへのアクセスを許可したいようです。ただし、「匿名」(ログに記録されていないサイト訪問者)へのアクセスは許可しません。