春季数据休息中的字段安全性



这个代表性的例子:

有一个管理员用户 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来实现这一点。资源处理器似乎仅适用于链接,验证器无法查看用户是否更改了字段...

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

更新 1

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

更新 2

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

更新 3

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

更新 4

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

也许你可以用@JsonView来描述你可以从DTO读取什么和你可以写什么? http://www.baeldung.com/jackson-json-view-annotation

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

最新更新