限制 spring-data-rest 返回的文件

Restrict documents returned by spring-data-rest

A class Dog 正在使用私有字段 owner 将所有者用户名保存在 class 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 安全性进行身份验证,因此可用作 @AuthenticationPrincipal.

要求REST只能访问用户拥有的狗。是否可以将 spring-data-rest 调整为 return 仅来自集合 dogs 的文档子集,具有 'owner' 字段的文档与中的用户名相同User 实例 return 由身份验证主体 ?

我在这种情况下所做的是实现自定义 RepositoryInvoker

调用程序是 Spring Data Rest 创建的调用程序的代理。想法是拦截 invokeFindAll(或其他应按所有权过滤的方法)并委托给实现过滤的查询方法。

请注意,我使用 Spring Data JPA 和 Specfications 来实现过滤谓词。我相信类似的方法应该通过 Mongo.

可行