2016-12-07 6 views
3

はあなたがコレクションをフィルタリングするために春のセキュリティを使用したい@ManyToOne関係で結ば@RepositoryRestResourceとして公開され、2つのエンティティEntityOtherEntity、(EntityOtherEntitiesいくつかを有していてもよい)春データ休憩 - 春のセキュリティと協会のリソースをフィルタリング

を考えてみましょうリポジトリのIterable<Entity> findAll()機能をオーバーライドします。

@RepositoryRestResource 
@Repository 
public interface EntityRepository extends CrudRepository<Entity, Long> { 
    @Override 
    @PostFilter("hasPermission(filterObject, 'READ')") 
    Iterable<Entity> findAll(); 
} 

GET /api/v1/entities、またはGET /api/v1/otherEntitiesを呼び出し、それに応じて許可を得てフィルタリングされた結果を取得します。

しかし、関連付けリソースGET /api/v1/entities/:id/otherEntitiesを呼び出すとき、取り出されたOtherEntity要素のリストはフィルタリングされません。

関連リソースもフィルタリングされるように、どのリポジトリ機能をオーバーライドする必要がありますか?

これを達成する別の方法がありますか?

答えて

1

残念ながら、私が知っている限り、これをSpring DataまたはJPAで直接サポートするメカニズムはありません。 (参照:https://jira.spring.io/browse/DATACMNS-293

リポジトリメソッドをオーバーライドするだけでは不十分です。これは、エンティティ階層のどのルートが返されるかを制御するだけなので、これをサポートするにはマップされたエンティティ...

フードの中で休止状態を使用している場合、これは理論的にはHibernate Filtersを使用することによって可能です。したがって、ベースエンティティでは、マッピングされたエンティティのそれぞれにフィルタを追加する必要がありますが、デフォルトのSpring Data Repositoryでうまく動作しないため、exampleに対して追加のカスタマイズを行います。何もないより良い場合

残念ながら、これは1を望んでいるだろうとほぼ同じくらい簡単ではありません:)

+0

私は私がどこかでそれについて読んで知っていた、チケットの参照をありがとうございました、それをこの時間をブックマークする:) は、あなたの答えを受け入れるだろう回ってくる。 –

関連する問題