/ / Restringir documentos retornados pelo spring-data-rest - java, spring, spring-security, spring-data-mongodb, spring-data-rest

Restringir documentos retornados pelo spring-data-rest - java, spring, spring-security, spring-data-mongodb, spring-data-rest

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 № 1

O 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.