You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore安全规则无法校验子集合角色 书籍共享权限配置异常

问题排查点及修正方案

你当前规则失败的核心原因有3个:

  1. 缺少登录状态校验:未判断request.auth != null,未登录状态下直接读取request.auth.token.email会直接抛出异常,导致规则校验失败
  2. 未校验参考文档是否存在:直接调用get().data.role时,如果发起共享的用户自身没有对应bookId的文档,会直接抛出异常导致规则拒绝
  3. 邮箱大小写匹配问题:Firebase Auth返回的token.email大小写和你userBooks下存储的邮箱doc名称可能不一致,大小写敏感会导致路径匹配失败

修正后的安全规则示例

match /userBooks/{emailId}/books/{bookId} {
  // 先校验登录状态,再调用权限判断函数
  allow write: if request.auth != null && isSharedAdmin(bookId);
}

function isSharedAdmin(bookId){
  // 统一转小写避免大小写匹配问题
  let currentUserEmail = request.auth.token.email.lower();
  let userBookPath = /databases/$(database)/documents/userBooks/$(currentUserEmail)/books/$(bookId);
  // 先判断文档存在,再读取角色字段
  return exists(userBookPath) && get(userBookPath).data.role == "admin";
}

额外校验建议

  • 确认userWantsToShare@gmail.com对应的/userBooks/userwantstoshare@gmail.com/books/9KHYZJVBY3BNAlYPYYoA文档中,role字段的值确实为字符串admin(无大小写、拼写错误)
  • 若需要限制共享时写入的角色范围,可新增规则约束:request.resource.data.role in ["read", "edit"],避免写入非法角色值

内容的提问来源于stack exchange,提问作者yaguarete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:27:04