次のDrupal 8 EntityQueryを記述して、現在のユーザーがアクセスできるノードのみを返すようにするにはどうすればよいですか?
$query = \Drupal::entityQuery('node')
->condition('type', 'article');
上記のクエリは、公開されていないものも含め、すべてのノードを返します。結果の使用方法(ノードのリストなど)に応じて、ユーザーは非公開ノードのタイトルやその他の情報を表示できます。
$query = \Drupal::entityQuery('node')
->condition('type', 'article')
->condition('status', 1);
「ステータス」条件を追加すると、公開されたノードのみのリストが表示されます。しかし、私はすべてのノードを表示するためのノード管理権限を持つ人々にお願いします。
基本的に、ビューのように、「管理または公開」フィルターをシミュレートする方法はありますか?
エンティティクエリでは、デフォルトでノード許可システムが考慮されます。実際には、ノード許可を使用してすべてwhenを取得するために、それをオプトアウトする必要があります。
問題は、drupalコアが実際にそのステータスのAPIを実装していないことです。これは、実装するモジュールを使用する場合にのみ関連します。
残念ながら、「adminまたはpublished」をシミュレートする唯一の方法は、自分で行うことです。権限を確認し、ユーザーが権限を持っていない場合は、status = 1条件を追加します。ビューは「ノードの管理」を使用しますが、技術的には実際には間違っています。「ノードアクセスのバイパス」の方が理にかなっており、非公開ノードのノード/ IDにアクセスしようとしたときにチェックされる内容と一致します。ただし、独自のコードでは、カスタム権限を含め、意味のあるものを何でも使用できます。
または、 https://www.drupal.org/project/view_unpublished のようなモジュールを使用することもできます。これにより、付与レコードが入力され、エンティティクエリが機能します。実際、そのモジュールを使用するときに、誰かがあなたが望む動作をバグとして報告したバグレポートをクローズしました https://www.drupal.org/project/view_unpublished/issues/2871272 。