firebase - 多租户的 Firestore 规则?
问题描述
Firebase 规则文档建议构建条件,将经过身份验证的用户的令牌(即request.auth
)与目标 Firestore 文档进行比较。就像是:
match /posts/{postId} {
allow read, write: if (request.auth.uid != null) &&
(resource.data.tenantId == request.auth.token.tenantId);
}
但是,Firebase 规则tenantId
中似乎没有 其他相关的身份验证字段(例如 、、等)。uid
email
email_verified
一种选择似乎是使用SDKtenantId
作为自定义声明单独添加。firebase-admin
但这会在用户对象上创建重复信息:
{
uid: 'nzjNp3QIfSR6uWy',
emailVerified: true,
displayName: 'pickleR'
...
tenantId: 'wubalubadubdub',
customClaims: { tenantId: 'wubalubadubdub' },
}
另一种选择似乎是tenants
在 Firestore 中创建一个集合。但是,这种方法似乎引入了不必要的复杂性并增加了所需的 Firestore 查询数。
是否有其他方法可以访问tenantId
Firestore 规则和/或使用多租户 Firestore 的替代最佳实践?
解决方案
沿着自定义声明路线走下去,我发现租户 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);
}
推荐阅读
- oracle - 我需要在 Perl 容器中打开哪个端口来连接 oracle db 容器
- php - 如何使用 laravel 从 excel 中读取图像并将它们存储在数据库中?
- kubernetes - ingress 中的 rewrite 注解在 k8s 中是如何工作的?
- angular - 在 RazorPay-Cordova 插件中获取弃用的方法和警告
- javascript - 如何使用nodejs以gzip形式将json数据从浏览器发送到REST端点(PUT)?
- reactjs - React Auth0 注销被调用两次
- git - 在 git 中自定义 ssh 参数
- c# - 我的 Context 没有从 Entity Framework Core 中的 DbContext 继承
- javascript - 删除html表中列之间的空格
- python - 安装包并在同一个 python 脚本中导入