Firestore规则校验userId是否在数组中失效问题排查
Firestore权限校验函数失效问题排查
你的问题出在isAuthorizedForProject函数的用户权限判断逻辑上,具体错误如下:
- 数组判断方式错误:你在函数里用
doc.users[user] != null来检查用户是否在users数组中,但这个写法只适用于对象类型的存储(比如以uid为键值的映射)。而你的users字段是数组类型,正确的判断方式应该用user in doc.users,和你在Project文档本身的read规则里的写法保持一致。
修正后的权限校验函数
function isAuthorizedForProject(projectId) { let doc = get(/databases/$(database)/documents/Project/$(projectId)).data; let user = request.auth.uid; return doc.owner == user || (doc.users && user in doc.users); }
补充说明
- 确认你的Project文档中
users字段确实是数组类型(存储格式类似["userUid1", "userUid2"]),而非对象类型。 - 修正后,users数组内的用户访问Models和Fields子集合时,权限校验就能正常通过了。
内容的提问来源于stack exchange,提问作者chrispsv
相关产品推荐
相关产品推荐

