【问题标题】:Restricting access to documents to facebook friends in mongodb在 mongodb 中限制对 facebook 好友的文档访问
【发布时间】:2016-01-06 01:44:00
【问题描述】:

我正在使用 mongodb mongoose 构建一个具有三个资源的简单照片存储应用程序:

  • 用户
  • 专辑
  • 照片

所有身份验证都由passportjs处理。

使用parent references,一个用户可以有很多相册,一个相册可以有很多照片。

每个相册都有不同的隐私设置:

  • 私人 - 只有创建者才能看到它
  • 公开 - 任何人都可以看到
  • 好友 - 只有 (facebook) 好友才能看到它

当我查询许多专辑时,我想根据登录的用户查看这 3 个专辑的混合,但我的问题是我应该如何检查登录的用户是否是创建者的 Facebook 朋友?

Facebook 提供了endpoint 来检查 2 个用户是否是朋友,但这意味着遍历一个集合并对每个用户发出请求并过滤结果,然后最终返回它们,这对我来说似乎很费劲工作。

另一种方法(仍然没有缺陷):

  1. 用户注册并允许该应用获取已在使用该应用的朋友
  2. 将这些好友 _id 存储在用户的数组中
  3. 当用户创建相册时,将此数组的副本保存到相册上的字段中
  4. 使用已登录用户 ID 的 $in 运算符进行查询

优点:

  • 列表项
  • 快速检查用户是否是创建相册的用户的好友
  • Facebook 不需要额外的请求

缺点:

  • 好友列表设置一次,所以如果好友列表发生变化,则需要以某种方式进行更新

  • 好友列表位于多个位置(在用户和 x 个相册上),因此需要以某种方式在所有这些位置进行更新

  • 当新朋友注册时,可能已经在应用程序上有朋友,我们需要找到每个朋友并将新朋友添加到他们的朋友列表中,并在需要时删除。

这些是我能想到的唯一方法,任何人都可以提供新方法或改进上述方法吗?也许我在看这个完全错误的方式,并且使用其他一些 mongo 功能有一个非常简单的解决方案?

【问题讨论】:

    标签: node.js facebook mongodb facebook-graph-api mongoose


    【解决方案1】:

    您可以只使用me/friends 边缘来接收所有 朋友(他们也已授权您的应用)为您自己的列表播种。然后,您可以使用Webhooks 订阅User.friends 边缘上的更改。发生这种情况时,您可以更新您的朋友列表,以便您的版本始终是最新的。

    【讨论】:

    • 有趣,我没想到网络挂钩。我想我将采取不同的方法并自己管理朋友,以便用户可以选择而不是只允许所有朋友。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多