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

时间:2016-02-22 16:32:50

标签: java spring spring-security spring-data-mongodb spring-data-rest

班级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实例返回的用户名相同。身份验证主体?

1 个答案:

答案 0 :(得分:2)

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

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

请注意我使用的是Spring Data JPA和Specfications来实现过滤谓词。我认为类似的方法应该与Mongo一起使用。