【发布时间】:2020-02-29 22:23:31
【问题描述】:
我只是想确保我正确理解了自定义声明,以下是我希望如何使用它们的一个示例:在我的应用中,我将每个用户关联到一个唯一的用户友好用户 ID(如“Bill”),以及一些我的安全规则使用此 ID。用户信息和配置文件存储在一个文档 /users/{user} 中,我还存储了相应的 Firestore 身份验证 ID。
例如:在文档 /users/bill 我有
{ firstname: "William"
lastname: "Clinton"
...
userid: "Bill" // Case sensitive userid
uid: "faergq34tfawefawef" // A valid Firestore authentication id }
然后我有一些集合,我想根据这个用户 ID 定义访问权限,例如:
match /users/{user}/friends/{friend} {
allow create, update: if request.auth.uid != null
&& get(/databases/$(database)/documents/users/$(user)).data.uid==request.auth.uid;
}
使用自定义声明,规则可能看起来像:
match /users/{user}/friends/{friend} {
allow create, update: if request.auth.uid != null
&& request.auth.token.userid.lower() == user;
}
更简单,每次执行规则时节省 1 次读取。任何反馈?这有意义吗?在重写所有规则之前确保我没有遗漏任何东西......
【问题讨论】:
标签: google-cloud-firestore firebase-security