2016-12-16 3 views
0

Я создал REST API:Безопасный объект обновления в апи отдыха

GET metohd на/API/адрес возвращает адрес для текущего пользователя. Затем пользователь может редактировать некоторые данные и отправлять отредактированные json по POST в/api/address. Но пользователь также может просто отправить preapred json, чтобы отдохнуть, не опуская пользовательский интерфейс.

Например:

{id:2, street: Madison, flatNumber: 14} 

Тогда в AddressService:

public void updateUser(AddressDto address) { 
    repository.findOneById(address.getId()).ifPresent(a -> { 
    a.setFlatNumber(address.getFlatNumber()); 
    respository.update(a); 
    }); 
} 

Но пользователь может отправить приготовленную JSON с другим идентификатором. И отредактируйте адрес, который ему не принадлежит. Как предотвратить эту ситуацию?

Я хочу убедиться, что пользователи могут обновлять свои данные. Должен ли я каждый раз проверять, имеет ли сущность связь с зарегистрированным пользователем?

ответ

0

Внутри метода updateUser измените код, чтобы вытащить запись на основе пользователя.

repostiory.findAddressByUserAndId(user, address.getId()) 

И если вам нужен только один адрес для каждого пользователя, подумайте о том, чтобы использовать useras идентификатор записи адреса.

+0

Спасибо за ваш ответ. Фактически адресная сущность - простой пример. В моем приложении у меня более сложные отношения с сущностями. Идея, которую вы предложили, хороша. Честно говоря, я надеялся, что есть более элегантное решение. Поэтому, если какой-нибудь лучший солетон не появится через какое-то время, я приму этот ответ. – Kamil