私はsymfony2、doctrine、knp paginator、およびセキュリティボーターを使用しています。私のアプリケーションでは、各ユーザーにいくつかの子供がいます。現在のユーザー(現在のログインユーザーによって定義された)に属する子のリストを表示する必要があります。
そこで、自分の子供にのみユーザー アクセスを許可するセキュリティ ボーターを作成しました。その場合は完全に機能します。
if ($this->get('security.context')->isGranted('view', $child))
また
{% for entity in pagination if app.security.isGranted('view', child) %}
ご想像のとおり、現在のページに子を表示していないだけなので、ページネーターは正しく機能しません。その結果、私のページネーターはゴミになります。
考えられる解決策は 2 つあります。
- クエリの段階でエンティティをフィルタリングします。質問は、ドクトリン クエリビルダーでisGrantedを使用するにはどうすればよいですか?
- ページネーターで何かを行い、適切に不要な子供を排除します
->andWhere('c.parent == :user') のようなものを追加してクエリを変更できることを認識していますが、このリスト機能は非常に一般的であり、 user-child、user- group- などの数十の異なる関係をリストするために使用されますtown-orders、user-post-tags、user-films .