Parse でエンティティを管理するには、現在ログインしているユーザーに関連付ける必要があるオブジェクトが多数あります。
私の懸念は次のとおりです。
User
渡されるのが現在ログインしているユーザーであることを保証するバックエンド コードはありません。- ユーザーは、新しく作成されたオブジェクトを他のユーザーに割り当てることができます。
この TODO アプリの例では、ドキュメントにCloud Code が配置されていないことが示されており、 が現在ログインしているユーザーに割り当てられてUser
いることを確認しています。Todo
コードに目を通した今、オブジェクトが保存されるたびにユーザーに関連付けられると考え始めています。このアプリケーションが機能する理由と、 を に関連付ける方法を説明できる人はTodo
いUser
ますか?
更新:気にしないでください。コード内で、Todo 用に保存するユーザーを指定する場所を見つけました。私の質問は、ユーザーが他のユーザー ID で todo を保存するコードを書くのを妨げているのは何ですか?
this.todos.create({
content: this.input.val(),
order: this.todos.nextOrder(),
done: false,
user: Parse.User.current(),
ACL: new Parse.ACL(Parse.User.current())
});
更新 #2:User
オブジェクトに、ユーザーが所有するオブジェクトのACL
読み取りのみを許可する設定がある場合、User
別のユーザー オブジェクトを取得するためにクエリを実行することはできません。ただし、他に 2 つの問題が考えられます。
- s テーブルのフィールドに が必要な
User
場合でも、オブジェクト全体ではなく、ユーザーの objectId を渡すことは可能ですか?user
Todo
_User
- 新しいユーザー オブジェクトを作成してそれに割り当てることもできると思います...これが問題になるシナリオを考えようとしていますが、今はできません。
誰かが役立つ解決策を確認または提供できる場合。#1を今すぐテストしようとしています。
更新 #3 -- いくつかのテストの後:
- s テーブルの
user
フィールドがオブジェクトを必要とする場合、objectId を文字列として取りません。Todo
_User
ただし、新しいユーザー オブジェクトを作成し、そこに objectId を設定して、これを回避できます。
var user = new Parse.User(); // Create user object user.id = "cqmEuj1Bzf"; // Assign user id // Create and save Todo var td = new Todo(); td.set("name", "Some ting todo"); td.set("user", user); td.save();
まさに気になっていたのがこちら。user_id ( ) を知っている限り、別のユーザーのアカウントに Todo を正常に保存できましたobjectId
。十分な数のユーザーがいると、少なくとも 1 人を推測して、誰かのアカウントを無作為に台無しにする可能性があります。
ならどうしよう?
回答: Cloud Code を使用して、渡されたユーザーが現在のユーザーと一致することを確認します。回答は、こちらの Parse のフォーラムに投稿されました。