2

GET 쿼리 매개 변수에서이 사용자를 지정하지 않고 findAll() 메소드를 사용하여 현재 사용자 관련 엔티티를 반환하려면 Spring 데이터 나머지 및 스프링 보안을 사용할 수 있습니까?

내 유일한 해결책은 매개 변수로 사용자를 전달하는 것입니다,하지만 어쩌면 그것은 또 다른 옵션은Spring 보안을 통한 Spring 데이터 나머지 - 현재 사용자로 모두 찾기

public interface InvoiceRepository extends CrudRepository<Invoice, Long> { 
@RestResource 
@PreAuthorize("hasRole('ROLE_ADMIN') or user?.username == authentication.name") 
List<Invoice> findAllByUser(@Param("user") User user); 

답변

5

당신은 @query 주석에서 SpEL을 표현식에서 사용할 수있는 보안 속성과 표현식을 만드는 SpEL EvaluationContext extension을 사용할 수 있습니다 SpringSecurityContext에서 그를 얻을 수 있어요 .

interface SecureBusinessObjectRepository extends Repository<BusinessObject, Long> { 

    @Query("select o from BusinessObject o where o.owner.emailAddress like ?#{hasRole('ROLE_ADMIN') ? '%' : principal.emailAddress}") 
    List<BusinessObject> findBusinessObjectsForCurrentUser(); 
} 

자세한 내용은 here입니다 : 이것은 당신이 현재 사용자 관계 만 비즈니스 오브젝트를 얻을 수 있습니다.

+0

작동합니다. 감사합니다. – ShaggyBathDuck

+0

@ ShaggyBathDuck 당신을 도운/upvoted 대답을 수락하는 것을 잊지 마세요 ... – Cepr0

관련 문제