ben*_*uly 5 spring-security jackson spring-data-rest spring-hateoas spring-boot
这个代表性例子:
有一个管理员用户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]
}
Run Code Online (Sandbox Code Playgroud)
问题是如何通过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将是更好的解决方案.现在我要为他们找到解决方案.
Ore*_*ron -1
也许您可以使用 @JsonView 来描述您可以从 DTO 读取什么和可以写入什么? http://www.baeldung.com/jackson-json-view-annotation
因此,您将拥有一种管理员视图和一种简单用户视图。
归档时间: |
|
查看次数: |
625 次 |
最近记录: |