如何在Firestore Rules中访问自定义声明内动态键对应的权限配置
Firestore Rules动态读取自定义声明方案可行性解答
你设计的这套用动态键自定义声明实现多组织权限管控的方案完全可行,你给出的规则写法本身就是Firestore Rules支持的合法语法。
Firestore Rules原生支持通过方括号[]动态读取request.auth.token下的字段值,你示例中request.auth.token[oid]的写法可以正确获取到通配符匹配到的组织IDoid对应的用户角色值,完全符合你的多组织权限管控需求。
注意事项
- 自定义声明有1000字节的总大小上限,你的场景下用户最多归属5个组织,按常规Firebase文档ID长度、角色字符串长度计算,总占用空间远低于上限,不会触发大小限制问题。
- 可以额外补充键存在判断让规则逻辑更严谨,调整后的规则示例如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /organisations/{oid} { allow read: if oid in request.auth.token && request.auth.token[oid] == "regularEmployee"; allow write: if oid in request.auth.token && request.auth.token[oid] == "admin"; } }
- 自定义声明更新后不会即时对应用户的现有登录态生效,需要用户重新登录,或者在客户端调用
getIdToken(true)强制刷新ID token后,新的声明才会在规则判断中生效。
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

