#java #google-app-engine #google-cloud-datastore #objectify
#java #google-app-engine #google-облачное хранилище данных #объективировать
Вопрос:
Я пытаюсь удалить запись из хранилища данных GAE с помощью ajax-запроса, который отправляет объекту «первичный ключ» (длинный идентификатор с автоматическим увеличением).
В настоящее время я делаю это (жестко запрограммированный ключ = 6):
Objectify ofy = ObjectifyService.begin();
ofy.delete( Test1.class , 6);
Это работает: он удаляет объект, у которого есть ключ = 6.
Но по соображениям безопасности мне нужен другой параметр (к вашему сведению: «parent_user»), чтобы только владелец мог удалить этот объект.
Кажется, Objectify.delete()
не позволяет передавать больше параметров, чем ключ…
Как я мог это решить? Потому что создание Objectify.get()
с моими необязательными параметрами key для получения полного объекта, а затем отправка всего объекта в delete() является неоптимизированным…
Ответ №1:
Как представлено на http://objectify-appengine.googlecode.com/svn/trunk/javadoc/index.html, Objectify.delete() не принимает никаких дополнительных параметров, кроме ключей объекта, идентификаторов или строк.
Итак, вам нужно сначала получить объект на основе ваших фильтров, а затем удалить их. Однако, чтобы оптимизировать это, вы можете получить только ключ объекта, а не полный объект. Затем вы удаляете на основе ключа.
Надеюсь, это поможет!
Ответ №2:
Если ваша модель данных позволяет вам разрешить пользователю быть предком хранилища данных ваших объектов, вы можете избавиться от запроса, поскольку предок является частью ключа.
Что я часто делаю, так это аутентификацию пользователя в начале каждого запроса, который использует аннотацию @Cached Objectify для кэширования всех пользователей (и их привилегий, которые встроены в пользователя).
Тогда большая часть данных, связанных с пользователем, имеет пользователя в качестве предка. Таким образом, всякий раз, когда пользователь пытается получить доступ к ресурсу или удалить его, я никогда случайно не позволю пользователю делать это с любыми объектами, которые не принадлежат ему. В целом, только те результаты, которые являются быстрыми и кэшируемыми.