我将Spring Data Rest与Spring Data Mongo一起使用。
我有一个相当简单的REST API,看起来与此类似:
public class User {
String id;
String email;
String password;
List<String> roles;
}
public class UserData {
String data;
User user;
}
@PreAuthorize("hasRole('ROLE_USER')")
public interface QueryTemplateRepository extends
MongoRepository<UserData, String> {
}
我现在想要的是,用户只能访问他们的数据,如果他们创建/编辑数据,则会将其链接到他们的帐户。
我是否必须摆脱MongoRepository并自己编写所有内容?是否有某种拦截器或过滤器,我可以这样做?
我想创建更多限制在用户数据中的REST API,因此如果有一些通用的解决方案可以解决这个问题。
答案 0 :(得分:1)
您可以使用 AbstractMongoEventListener 的功能,它有方便的方法满足您的需求:
void onAfterConvert(DBObject dbo,E source)
void onAfterSave(E source,DBObject dbo)
void onBeforeSave(E source,DBObject dbo)
void onBeforeConvert(E source)
void onAfterLoad(DBObject dbo)
void onApplicationEvent(MongoMappingEvent事件)
答案 1 :(得分:0)
我认为这是您可以通过方面作为通用方法在服务层中处理的问题。 AbstractMongoEventListener 是应用方面技术的一个很好的例子。
因为你正在处理spring-data-rest,所以除非你包装它并通过Controller公开存储库,否则没有服务层可用。
REST标准中没有任何关于允许仅由其创建者修改/删除实体的内容。