0

Класс Dog использует частное поле owner держать владелец имя пользователя хранится в классе User (который реализует UserDetails):Ограничить документы, возвращенные пружинных данными-отдых

@Document 
public class Dog { 

    @Id 
    private ObjectId id; 

    private String owner; 
} 

@Document 
public class User implements UserDetails { 

    @Id 
    private ObjectId id; 

    private String username; 

} 

Этих документы сохранялись с помощью spring-data-mongodb и с использованием spring-data-rest. Пользователь аутентифицируется с использованием Spring Security, поэтому он доступен как @AuthenticationPrincipal.

Просим, ​​чтобы REST мог получить доступ только к собаке, которой владеет пользователь. Можно ли настроить подстановку spring-data-rest для возврата только подмножества документов из коллекции dogs, те, у которых поле «владелец» совпадает с именем пользователя в экземпляре User, возвращенном принципалом аутентификации?

ответ

2

То, что я сделал в таком сценарии, было выполнение пользовательских RepositoryInvoker.

Invoker был прокси-сервером для созданного Spring Data Rest. Идея состояла в том, чтобы перехватить invokeFindAll (или другой метод, который должен фильтровать по собственному усмотрению) и делегировать метод запроса, который реализует фильтрацию.

Обратите внимание, что я использовал Spring Data JPA и Specfications для реализации предиката фильтрации. Я считаю, что подобный подход должен быть осуществим с Монго.

Смежные вопросы