Spring Data Rest中的字段安全

时间:2017-04-01 12:59:39

标签: spring-boot spring-security jackson spring-data-rest spring-hateoas

这个代表性的例子:

管理员用户A 普通用户B

A可以看到并更改x,y,z。

只有当z具有特定值时,B才能看到x,y(不是z)并改变x(不是y,z)

public class U{
    private Long id;
    private String x;
    private String y;
    private String z;
    [... getter and setter]
}

问题是如何通过Spring Data Rest实现这一点。 ResourceProcessor似乎只适用于链接,而Validator无法查看用户是否更改了字段...

我已经实现了基于属性的访问控制,因此我可以轻松地在数据库中创建和保存角色,权限和策略(使用SpEl),以确定谁可以查看和更改特定字段。

更新1

我添加了一个Jackson BeanSerializerModifier来过滤属性,但是有一个问题是我不知道z的原始(数据库)值,并且无法检查B是否有权更改x。

更新2

我添加了一个自定义Jackson Std(De)Serializer,但现在我无法动态地将它用于每个实体,因为我必须为每个实体编写完整的(de)序列化器。

更新3

在尝试解决此问题的许多尝试失败两周后,我将尝试将过滤器集成到SDR中。

更新4

虽然我为PUT和PATCH请求添加了一个过滤器,但我认为https://jira.spring.io/browse/DATAREST-373https://jira.spring.io/browse/DATAREST-428是更好的解决方案。现在我要为他们找到解决方案。

1 个答案:

答案 0 :(得分:-1)

也许您可以使用@JsonView来描述您可以阅读的内容以及您可以从DTO中编写的内容? http://www.baeldung.com/jackson-json-view-annotation

因此,您将拥有一个管理员视图和一个简单用户视图。