春のセキュリティから、@PreAuthorizeまたは@PostAuthorizeを探していると思います。これらは、春のメソッドレベルのセキュリティのアノテーションです。ロールやその他の属性に基づいて制限することができます。
interface OrderRepository extends Repository<Order, Long> {
@PreAuthorize("hasRole('ROLE_ADMIN')") // Allows only users with admin privileges
@Query("select o from Order o where o.id = ?1 and o.from.id = ?{#principal.id} ")
Optional<Order> findOrder(long id);
}
https://spring.io/blog/2013/07/04/spring-security-java-config-preview-method-security/
編集:
あなたが現在認証されたユーザーは、オーダーから誰であるかに関連付けられている場合にのみご注文を返すように探している場合。
@PostAuthorize("returnObject.from == authentication.name")
Optional<Order> findOrder(long id);
@PreAuthorize @PostAuthorizeアノテーションでsprings式言語を使用できます。
http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html
希望これは編集2
に役立ちます:あなたは、コレクションをフィルタリングする@PreFilterと@PostFilterを使用することができます。
例
@PostFilter("filterObject.from == authentication.name")
List<Order> findOrder(long id);
これは、リストを介して実行してからのみ、現在認証されたユーザである受注を返します。また、式を結合することもできます。
@PostFilter("hasRole('ROLE_ADMIN') or filterObject.from == authentication.name")
List<Order> findOrder(long id);
これは、現在の認証されたユーザーがROLE_ADMINのロールを持っているかどうかを確認します。ユーザーがその特権を持っていれば、変更されていないリストが返されます。それ以外の場合はフィルターが適用され、「from」が現在の認証済みユーザーに関連付けられているオーダーのみが返されます。
どのように@PreAuthorizeはユーザー単位で許可を行い、役割単位ではできませんか? – aprofromindia
@aprofromindiaが私の投稿を編集しました。 PostAuthorizeは、返されたOrderオブジェクトのfrom変数を現在の認証済みユーザーでチェックします。 – jmw5598
findAll()の認証にこのロジックを実装するにはどうすればいいですか。 @PostFilter()を使用してリスト全体をフィルタリングしたくない。 – aprofromindia