我正在尝试通过ajax查询从GAE数据存储中删除记录,该查询发送对象“主键”(带有自动增量的长Id)。
目前,我正在这样做(硬编码密钥= 6):
Objectify ofy = ObjectifyService.begin();
ofy.delete( Test1.class , 6);
这有效:它删除了Key = 6的实体。
但出于安全原因,我需要另一个参数(fyi:“parent_user”),因此只有所有者才能删除此对象。
似乎Objectify.delete()
不允许传递比键更多的参数...
我怎么能解决这个问题?因为使用我的可选参数+键创建Objectify.get()
以获取完整对象然后将整个对象发送到delete()是nubish&未优化...
答案 0 :(得分:3)
如http://objectify-appengine.googlecode.com/svn/trunk/javadoc/index.html所示,除了对象键,ID或字符串之外,Objectify.delete()不会采用任何其他参数。
因此,您需要先根据过滤器获取对象,然后将其删除。但是,为了优化它,您只能获取对象的键而不是完整对象。然后根据密钥删除。
希望这有帮助!
答案 1 :(得分:0)
如果您的数据模型允许您让用户成为对象的数据存储祖先,则可以删除查询,因为祖先是密钥的一部分。
我经常做的是在每个请求开始时对用户进行身份验证,该请求使用Objectify的@Cached注释来缓存所有用户(以及嵌入用户的权限)。
然后,大多数用户相关数据都将用户作为祖先。这样,每当用户尝试访问或删除资源时,我都不会意外地允许用户对任何不属于她的对象执行此操作。总而言之,只有快速和可达的才能获得。