在 Parse 中管理实体时,我需要将很多对象绑定到当前登录的用户。
我的担忧是:
- 没有后端代码确保
User
传入的是当前登录的用户。 - 用户可以将任何新创建的对象分配给其他用户。
他们有这个示例 TODO 应用程序,在文档中没有显示任何云代码,以确保分配给User
的Todo
是当前登录的用户。
现在我浏览了代码,我开始认为每当保存一个对象时,它都会与用户相关联。谁能解释为什么这个应用程序有效以及它是如何将Todo
s 与 s 关联起来的User
?
更新:没关系,我在他们的代码中找到了他们指定用户为 Todo 保存的位置。我的问题是,是什么阻止了用户编写使用其他人的用户 ID 保存待办事项的代码?
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
他们拥有的对象,那么他们将无法查询以获取另一个用户对象以传递。但是,还有另外两个可能的问题:
User
即使s 表user
上的字段需要一个,他们是否可以传递用户的 objectId 而不是整个对象?Todo
_User
- 我相信他们也可以创建一个新的用户对象并将其分配给它......我正在尝试考虑一个可能会成为问题的场景,但我现在不能。
如果有人可以确认或提供对其中任何一个有帮助的解决方案。现在要尝试测试#1。
更新#3——经过一些测试:
- 如果s 表
user
上的字段Todo
需要_User
对象,则不会将 objectId 作为字符串。 然而,他们可以创建一个新的用户对象并在那里设置 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
有了足够多的用户,他们可能会猜到至少一个随机搞砸某人的帐户。
所以现在怎么办?
答:使用云码验证传入的用户是否与当前用户匹配。答案已发布在Parse 的论坛上。