Tun*_*erx 2 firebase google-cloud-firestore firebase-security-rules
我的第一个问题是如何指定该数据库定义的安全规则?有一些最佳实践方法吗?
我们的第一个想法是这样做:
match /databases/{database}/documents/projects/{projectUid}/{document=**} {
allow read: if
(/databases/$(database)/documents/projects/$(projectUid)/companyId) ===
(/databases/$(database)/documents/users/$(request.auth.uid)/companyId)
}
Run Code Online (Sandbox Code Playgroud)
但是根据文档,这意味着我们每个读取基本上需要3个读取(2个安全性查询和1个从DB实际读取)。这似乎是对查询的浪费。
有没有比这更好的方法了?我们正在考虑更改子集合:
这样,我们可以使用与文档中类似的方法,其中每个匹配项都包含{companyId},在allow语句中,我们将使用类似
match /databases/{database}/documents/companies/{companyId}/projects/{projectId} {
allow read: if
exists(/databases/$(database)/documents/companies/$(companyId)/users/$(request.auth.uid));
}
Run Code Online (Sandbox Code Playgroud)
感谢您提供有关如何以最可扩展且最安全的方式构建它的任何建议。
您是否考虑过将用户的公司ID添加为对其个人资料的自定义声明?这样,您的安全规则中就不需要其他读取。
由于设置这些声明需要Admin SDK,因此它将要求您可以在某个地方运行受信任的代码。但是,如果您还没有自己的受信任环境,则可以为此使用Cloud Functions,例如,基于一些其他操作,例如写入当前Firestore结构。
归档时间: |
|
查看次数: |
580 次 |
最近记录: |