这个代表性的例子:
管理员用户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-373和https://jira.spring.io/browse/DATAREST-428是更好的解决方案。现在我要为他们找到解决方案。
答案 0 :(得分:-1)
也许您可以使用@JsonView来描述您可以阅读的内容以及您可以从DTO中编写的内容? http://www.baeldung.com/jackson-json-view-annotation
因此,您将拥有一个管理员视图和一个简单用户视图。