【发布时间】:2020-11-27 04:17:55
【问题描述】:
Firebase Rules docs 建议构建条件,将经过身份验证的用户的令牌(即request.auth)与目标 Firestore 文档进行比较。比如:
match /posts/{postId} {
allow read, write: if (request.auth.uid != null) &&
(resource.data.tenantId == request.auth.token.tenantId);
}
但是,tenantId 与其他相关的身份验证字段(例如,uid、email、email_verified 等)一样,在 Firebase Rules 中似乎不可用。
一个选项似乎是使用firebase-admin SDK 将tenantId 单独添加为custom claim。但这会在用户对象上创建重复信息:
{
uid: 'nzjNp3QIfSR6uWy',
emailVerified: true,
displayName: 'pickleR'
...
tenantId: 'wubalubadubdub',
customClaims: { tenantId: 'wubalubadubdub' },
}
alternative option 似乎是在 Firestore 中创建 tenants 集合。但是,这种方法似乎引入了不必要的复杂性并增加了所需的 Firestore 查询数。
是否有替代方法可以访问 Firestore 规则中的 tenantId 和/或使用多租户 Firestore 的替代最佳做法?
【问题讨论】:
标签: firebase google-cloud-firestore google-cloud-identity