解析数据安全性和关系

时间:2015-02-26 21:01:25

标签: backbone.js parse-platform relationship acl single-page-application

我尝试使用Parse和Backbone前端确定以下场景的最佳方法。我想构建一个讨论主题,其中两个或多个不同角色的用户(即:成员,管理员等)能够通过发布将按时间顺序列表显示的简单消息进行通信。将显示消息,其中包含用户名,用户照片,发布日期和消息内容。

我的初衷是在Parse中使用以下字段创建一个Message类:

  • title(string)
  • message(string)
  • 作者(指针)

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

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

这很有效,而且很好,但后来我想到了ACL,我会用来锁定我的数据,而且我想到我不会想要任何用户,除了管理员能够看到其他用户信息。

Sooooo带来了我的困境,我如何限制通过此关系可用的数据,以便所有用户数据可访问,但我们仍然可以访问用户名称和个人资料pic ?

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

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

希望有人对此问题有一些了解,因为我确信它在SPA世界中相当普遍,我只是不知道如何在搜索中说出问题,所以我没有&#39找不到任何东西。

谢谢!

2 个答案:

答案 0 :(得分:1)

考虑到公共系统中的用户对用户对话确实应该在用户和用户之间进行。人物。

personaA <-> personaB
   |            |
 userA        userB

我会创建一个Persona表,它是用户的公共面孔。它将包含昵称(不同于但可能等于用户名),照片等,以及返回用户表的指针,它将在类级别保持完全锁定。

答案 1 :(得分:0)

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

通过这种方式,您可以使用ACL来锁定用户对象,然后问题就会消失。