war*_*eld 7 firebase google-cloud-firestore google-cloud-identity
Firebase规则文档建议构建条件,将经过身份验证的用户令牌(即request.auth)与目标 Firestore 文档进行比较。就像是:
match /posts/{postId} {
allow read, write: if (request.auth.uid != null) &&
(resource.data.tenantId == request.auth.token.tenantId);
}
Run Code Online (Sandbox Code Playgroud)
但是,Firebase 规则tenantId中似乎没有像其他相关身份验证字段那样可用 (例如、、uidemailemail_verified等)
一种选择似乎是使用SDK 作为自定义声明tenantId单独添加。但这会在用户对象上创建重复信息:firebase-admin
{
uid: 'nzjNp3QIfSR6uWy',
emailVerified: true,
displayName: 'pickleR'
...
tenantId: 'wubalubadubdub',
customClaims: { tenantId: 'wubalubadubdub' },
}
Run Code Online (Sandbox Code Playgroud)
另一种选择似乎是tenants在 Firestore 中创建集合。然而,这种方法似乎引入了不必要的复杂性并增加了所需的 Firestore 查询数量。
是否有其他方法可以访问tenantIdFirestore 规则和/或通过多租户使用 Firestore 的替代最佳实践?
小智 10
沿着自定义声明路线后,我发现租户 ID 已经存储在嵌套对象中,如下所示'request.auth.token.firebase.tenant'
在你的例子中,规则是:
match /posts/{postId} {
allow read, write: if (request.auth.uid != null) &&
(resource.data.tenantId == request.auth.token.firebase.tenant);
}
Run Code Online (Sandbox Code Playgroud)
您描述的两个选项是惯用的:
request.auth.uid。这些都不总是比另一个更好:自定义声明更方便且更具可读性,而使用数据库通常更快。通常使用数据库查找来获取更不稳定的信息,并声明“一次”信息。
由于这是针对租户 ID 的,不太可能快速更改,因此我可能会选择自定义声明。
| 归档时间: |
|
| 查看次数: |
1748 次 |
| 最近记录: |