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