限制对Spring MongoRepository中用户数据的访问

时间:2015-04-10 13:38:41

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

我将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,因此如果有一些通用的解决方案可以解决这个问题。

2 个答案:

答案 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标准中没有任何关于允许仅由其创建者修改/删除实体的内容。