只允许用户的好友看到彼此的信息?

Allow only friends of users to see each other's information?

我在 Firebase 中有一个用户和好友集合,其结构如下:

Users:
    UID-1
        Email
        Username
    UID-2
        Email
        Username
    ...

Friends:
    FID-1
        UID-1
        UID-2
    ...

其中用户名是 public,但电子邮件是私人的,按照当前规则强制执行。我希望能够安全地检索与用户成为好友的 UID 列表。

我发现通过指定 auth != nullauth.uid == $UID 来强制执行用户名和电子邮件访问权限非常简单,但我如何才能做到这一点,以便用户只能访问他们是朋友的用户文档与?


我可以查询数据库 'internally' 作为规则的一部分吗? IE。 “只有当用户是他们的朋友时才允许检索这个文档(朋友信息存储在“朋友”目录中)?”如果提出的解决方案需要重构数据或现有的安全规则,我没问题。

经过一段时间的研究,我已经解决了这个问题,并且想post我的解决方案来解决任何有同样问题的人:

您基本上可以 'split the difference' 不为用户应用基于友谊的规则,而是为阅读友谊应用规则。由于 UID 不可猜测,您可以假设有人查询 public 特定信息的人有这样做的理由。然后您所要做的就是控制对这些 UID 的访问。如果您是相关方之一,我只允许阅读友谊的详细信息。

例如

".read" : "auth.uid === data.child('UID-1').val() || auth.uid === data.child('UID-2').val()"