只允许用户的好友看到彼此的信息?
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 != null
或 auth.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()"
我在 Firebase 中有一个用户和好友集合,其结构如下:
Users:
UID-1
Email
Username
UID-2
Email
Username
...
Friends:
FID-1
UID-1
UID-2
...
其中用户名是 public,但电子邮件是私人的,按照当前规则强制执行。我希望能够安全地检索与用户成为好友的 UID 列表。
我发现通过指定 auth != null
或 auth.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()"