班级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
返回文档的子集,具有'owner'字段的文档与从User
实例返回的用户名相同。身份验证主体?
答案 0 :(得分:2)
我在这种情况下所做的是实施自定义RepositoryInvoker。
调用者是Spring Data Rest创建的代理。我们的想法是拦截invokeFindAll
(或其他应该按所有权过滤的方法)并委托给实现过滤的查询方法。
请注意我使用的是Spring Data JPA和Specfications来实现过滤谓词。我认为类似的方法应该与Mongo一起使用。