3

オブジェクト「主キー」(自動インクリメント付きの長い ID) を送信する ajax クエリを使用して、GAE データストアからレコードを削除しようとしています。

現在、私はこれを行っています(キー= 6をハードコードしています):

Objectify ofy = ObjectifyService.begin();
ofy.delete( Test1.class , 6);

これは機能します。Key=6 を持つエンティティを削除します。ただし、セキュリティ上の理由から、所有者のみがこのオブジェクトを削除できるように、別のパラメーター (fyi : "parent_user") が必要です。キーよりも多くのパラメーターを渡すことは許可されてObjectify.delete()いないようです...

どうすればこれを解決できますか? オプションのパラメーター+キーを使用しObjectify.get()て完全なオブジェクトを取得し、オブジェクト全体をdelete()に送信するのは、最適化されておらず、最適化されていないためです...

4

2 に答える 2

3

http://objectify-appengine.googlecode.com/svn/trunk/javadoc/index.htmlに示されているように、Objectify.delete()は、オブジェクトキー、ID、または文字列以外の追加のパラメーターを取りません。

したがって、最初にフィルターに基づいてオブジェクトを取得してから、それらを削除する必要があります。ただし、これを最適化するために、オブジェクトのキーのみを取得でき、オブジェクト全体は取得できません。次に、キーに基づいて削除します。

お役に立てれば!

于 2011-11-09T11:44:18.287 に答える
0

データ モデルでユーザーをオブジェクトのデータストアの祖先にすることができる場合、祖先はキーの一部であるため、クエリを取り除くことができます。

私がよく行うことは、すべてのリクエストの最初にユーザーを認証することです。これは、Objectify の @Cached アノテーションを使用して、すべてのユーザー (およびユーザーに埋め込まれたユーザーの権限) をキャッシュします。

次に、ユーザー関連のデータのほとんどは、ユーザーを祖先として持っています。このようにして、ユーザーがリソースにアクセスまたは削除しようとするたびに、ユーザーが自分のものではないオブジェクトに対してそれを行うことを誤って許可することは決してありません。全体として、高速でキャッシュ可能なもののみを取得します。

于 2012-04-02T18:30:09.687 に答える