10

ユーザーがエンティティに対して特定のアクションを実行するための正しいアクセス許可を持っているかどうかを確認するために投票者を使用しています。

CRUD アクションは簡単に確認できます。しかし、結果セットまたは概要のアクセス許可を確認するにはどうすればよいですか。概要では、PagerFanta によるページ付けを使用して結果をページ付けします。パフォーマンスの問題のため、事前に結果を確認することはできません。ページネーションで返された結果を確認するだけで、ページが空または半分空になる可能性があります。

ユーザーが表示できる結果のみを返すように、リポジトリに同じ検証を配置することを考えています。しかし、これによりコードの重複が生じます。これは、ボーターで 1 回、リポジトリで 1 回、同じ検証が重複するためです。

これに対するより良い解決策はありますか、それとも有権者がこれに対する最良の解決策ではありませんか?

4

1 に答える 1

1

ああ、同じ古い「条件付きページネーション」の問題、今は新しい時代です:)

(Googleでさえ解決したとは思いませんが、ページネーションの出力にさらに多くのページが表示されることがありますが、実際には得られます)。

もちろん、あなたの場合の問題は、Voter があなたの問題ではないため、何の役にも立たないことです。オブジェクト レベルでアクセスをチェックするために使用されますが、sql/dql/ で実行する必要があります。クエリ レベル。最大の違いは、棄権、拒否、許可を返す代わりに、メソッドが dql 条件を返す必要があることです。したがって、タスクは別です。

ただし、できることは、これらの条件をvoterクラスに返す関数を追加し、それをリポジトリに注入することです。少なくともこの方法では、同じオブジェクトのアクセス ロジックは同じクラスになります。

于 2015-01-30T10:21:04.813 に答える