限制 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.
可行
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.
可行