解析数据安全和关系

Parse data security and relationships

我正在尝试使用 Parse 和 Backbone 前端确定以下场景的最佳方法。我想建立一个讨论线程,让两个或多个具有不同角色(即:成员、管理员等)的用户能够通过发布将出现在时间列表中的简单消息来进行交流。消息将显示用户名、用户照片、发布日期和消息内容。

我最初的直觉是用以下字段在 Parse 中创建消息 class:

然后,当我加载线程的消息时,我会包括作者关系,这样我就可以获得必要的信息,例如他们的姓名和个人资料图片。

var query = Parse.Query('Message');
query.include('author');
query.find({
    success: function(msgs) {...},
    error: function(error) {...}
});

这行得通,一切都很好,很花哨,但后来我开始考虑我将用来锁定我的数据的 ACL,我突然想到,除了管理员之外,我不希望任何用户能够查看其他用户信息。

太让我进退两难了,我如何限制通过这种关系可用的数据,以便所有用户数据无法访问,但我们仍然可以访问用户名和个人资料照片?

我知道我总是可以将作者姓名和图片保存到消息记录本身,这样我就不需要访问关系,但这会遇到更改作者方面的数据的问题,例如新的个人资料图片或然后不会反映在消息线程中的名称更新。

云代码是另一种选择,我可以手动选择字段 return,但如果您的应用程序中的很多地方都存在这种情况,这似乎需要大量工作。

希望有人对这个问题有一些见解,因为我确信它在 SPA 世界中相当普遍,我只是不知道如何在搜索中表达这个问题,所以我没有找到任何东西。

谢谢!

考虑一下 public 系统中用户与用户的对话确实应该在用户角色之间进行。

personaA <-> personaB
   |            |
 userA        userB

我会创建一个角色 table,它是用户 public 的脸。它将包含昵称(不同于但可能等于用户名)、照片等,以及指向用户 table 的指针,它将在 class 级别保持完全锁定。

就安全性而言,默认情况下 User class 相当 "open"。例如,任何可以获得您的密钥的人(在 iOS、Android 或 JavaScript 中并不难)可以枚举您的许多列(用户名、电子邮件可访问,但密码不可访问) .最好将所有敏感数据放在用户对象中,并将照片、姓名等可访问的内容存储在另一个数据中 class。所以 "author" 将是指向 AuthorData class 的指针,您可以将 AuthorData 的指针存储在 User 对象中。

这样您就可以使用 ACL 锁定您的用户对象,然后问题就消失了。