Firestore分类广告更新规则适配:添加审核员权限及排障
修正Firestore审核员权限规则
你的思路方向正确,但需要处理用户文档不存在、roles字段未定义等边界情况,避免规则因空值判断失败。调整后的完整规则如下:
match /classifiedAds/{uid}/{document=**} { // 判断当前用户是否为审核员 function isModerator() { // 获取当前登录用户的文档 const userDoc = get(/databases/$(database)/documents/users/$(request.auth.uid)); // 依次校验:文档存在、roles字段存在、moderation权限为true return userDoc.exists && userDoc.data.roles != null && userDoc.data.roles["moderation"] == true; } allow read, create: if true; // 更新权限:所有者或审核员,同时确保用户已登录 allow update: if request.auth != null && (request.auth.uid == resource.data.ownerId || isModerator()); allow delete: if request.auth != null && request.auth.uid == resource.data.ownerId; }
核心调整说明:
- 新增
request.auth != null判断:避免未登录用户触发规则时出现空指针错误 - 完善
isModerator函数:通过多层校验覆盖用户文档不存在、roles字段缺失等场景,确保规则稳定性
Firestore规则日志查看方法
有两种方式记录和查看Firestore规则的执行日志:
1. Firebase控制台规则模拟器
- 打开Firebase控制台,进入Firestore数据库的「规则」页面
- 点击「模拟器」,选择要测试的操作(如更新),填写请求参数后执行
- 模拟器会展示完整的规则评估流程,包括每一步的条件判断结果、请求是否允许,适合调试阶段使用
2. Cloud Logging(生产环境日志)
- 打开Google Cloud控制台,进入「Logging」>「日志浏览器」
- 在筛选条件中输入:
resource.type="firestore_database" logName="projects/[你的项目ID]/logs/firestore.googleapis.com%2Ffirestore_rules" - 这里会展示所有Firestore规则的执行日志,包含每个请求的规则评估细节、允许/拒绝状态、请求来源等,适合生产环境排查权限问题
内容的提问来源于stack exchange,提问作者Stéphane de Luca
相关产品推荐
相关产品推荐

