我在Firebase中有一个用户和朋友集合,结构如下:
Users:
UID-1
Email
Username
UID-2
Email
Username
...
Friends:
FID-1
UID-1
UID-2
...用户名是公开的,但电子邮件是私密的,这是由现行规则强制执行的。我希望能够检索用户安全地使用的UID列表。
我发现它很简单,可以通过指定auth != null或auth.uid == $UID来强制访问用户名和电子邮件,但是如何使用户能够访问他们是朋友的用户文档呢?
作为规则的一部分,我可以查询数据库“内部”吗?也就是说。“只有当用户是朋友时才允许检索此文档(朋友信息存储在”朋友“目录中)?如果提出的解决方案需要重组数据或现有的安全规则,我是可以的。
发布于 2022-04-02 14:56:16
经过一段时间的研究,我已经解决了这个问题,我想把我的解决方案发到任何有同样问题的人:
基本上,你可以通过为用户应用基于友谊的规则来“平分差异”,而可以应用一条阅读友谊的规则。因为UID是不可猜测的,所以您可以假设查询某个特定信息的人有理由这样做。那么,您所要做的就是管理对这些UID的访问。我是这样做的,如果你是当事人之一,我只允许你阅读友谊的细节。
例如。
".read" : "auth.uid === data.child('UID-1').val() || auth.uid === data.child('UID-2').val()"
https://stackoverflow.com/questions/71713086
复制相似问题