Uma aula Dog
está usando um campo privado owner
manter o nome de usuário do proprietário mantido em classe User
(que implementa 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;
}
Esses documentos são persistidos usando spring-data-mongodb
e exposto usando spring-data-rest
. O usuário é autenticado usando o Spring Security, portanto, está disponível como @AuthenticationPrincipal
.
É solicitado que o REST possa acessar apenas o cão que o usuário possui. É possível ajustar spring-data-rest para retornar apenas um subconjunto dos documentos da coleção dogs
, aqueles com o campo "proprietário" é o mesmo que o nome de usuário no User
instância retornada pelo principal de autenticação?
Respostas:
2 para resposta № 1O que eu fiz em tal cenário foi implementar personalizado RepositórioInvoker.
O invocador era um proxy para o criado pelo Spring Data Rest. A ideia era interceptar invokeFindAll
(ou outro método que deve filtrar pela propriedade) e delegar ao método de consulta que implementa a filtragem.
Observe que eu estava usando o Spring Data JPA e Specfications para implementar o predicado de filtragem. Eu acredito que a abordagem semelhante deve ser viável com o Mongo.