Я использую Spring Boot для хранения сложных JSON-структур через JPA в нашей базе данных.
Корень json-структуры представляет собой объект "Дом". Объект "Дом" содержит несколько предметов мебели. Например:
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-Entities существует двунаправленная связь OneToMany от дома до мебели. Я подумал, может быть, поиск в базе данных любой мебели входящих запросов, проверить все разрешения на все из них. Но я бы предпочел только проверить разрешение на дом (потому что в реальной жизни у меня есть гораздо больше объектов, таких как мебель)