【发布时间】:2018-10-30 06:30:36
【问题描述】:
我正在使用 Spring Boot 通过 JPA 在我们的数据库中存储复杂的 json 结构。
json 结构的根代表一个“House”对象。一个“房子”对象包含几个“家具”。例如:
House ID: 4711
|- Furniture: ID 4712 (with confidential information)
用户对某些房屋及其所有“家具”拥有读/写权限。
我的问题是,如果用户知道它们的主键,则通过 REST-API,用户可以从其他房屋“窃取”家具;有这样的要求:
POST http://localhost:8080/house
{
houseId: 99991337,
furnitures: [{
furnitureId: 4712,
...
}]
}
这导致:
House ID: 4711
|- empty!
House ID: 99991337
|- Furniture 4712 (with confidential information)
尽管用户没有访问 4711 号房屋的权限,但他将家具 4712 与 4711 号房屋“取消链接”,而是将其链接到 99991337 号房屋。
如何禁止更换家具之家?
在 JPA 实体中,存在从房屋到家具的双向 OneToMany-Relationship。我想也许在数据库中搜索任何传入请求的家具,检查所有这些请求的所有权限。但我宁愿只检查房子的许可(因为在现实生活中,我有更多的实体,比如家具)
【问题讨论】:
-
houses的权限是如何定义的? -
@htshame 我添加了一个授权示例。在我的实际应用程序中,所有这一切都要复杂得多 - 但我相信,这个简化示例的一个好的答案将为我的复杂现实世界应用程序提供良好的服务。
-
你的意思是一些ID的家具只能使用一次?
-
@Akceptor 是的,一件家具应该属于完全一个房子,并且应该由该房子私人拥有。只有被允许查看/编辑房屋的用户才能查看/编辑其家具。
-
那么,在现有条件下,用户每次用
POST http://localhost:8080/house创建房子都可以创建新家具?
标签: java spring spring-boot jpa