Firebase中基于密钥的便捷访问实现方案咨询
Firebase Firestore 无注册审核者权限实现方案咨询
角色权限需求
- 作者:可创建多个Item,仅作者能发起Item创建,可读写自己的Item内容。
- 审核者:无需注册,通过含密钥的链接访问指定Item,可对该Item进行读取、添加、修改操作(暂不开放删除权限)。
现有Firestore结构
/users/{user_id}/items/{item_id}/<other_documents_and_collections_related_to_item>
作者端安全规则(已实现)
- 验证用户已完成认证;
- 仅当认证用户的
uid与路径中的user_id匹配时,可对对应Item进行读写操作。
审核者权限实现困境
希望审核者通过链接中的密钥访问Item,但Firebase调用无法直接传递密钥参数,尝试过以下方案均不满足需求:
- 匿名认证(anonymousAuth):无需注册,但无法向安全规则的
auth变量传递自定义参数; - 邮箱链接登录(signInWithEmailLink):要求创建账号,且有链接防重复使用机制,不符合无注册需求;
- 自定义Auth声明(Custom Claim):需要Admin SDK及额外后端,希望完全依赖Firebase实现,不想额外搭建后端。
曾考虑为每个Item创建虚拟账号,但该方案可行性差。
补充说明:待暴露数据可公开,密钥泄露仅会增加未授权访问概率,影响可控。
补充思路(经Frank van Puffelen评论后)
调整Firestore结构,新增两个子节点:
/users/{user_id}/items/{item_id}/secrets/{secret_key}/<other_documents_and_collections_related_to_item> /users/{user_id}/items/{item_id}/privates/sec_key <- 该文档存储secret_key字段,仅作者可访问
安全规则设计
- 非作者用户无法访问
privates/sec_key文档,也无法列出secrets集合; - 非作者用户在
/users/{user_id}/items/{item_id}/secrets/{secret_key}/**路径下的操作,需验证{secret_key}对应的文档存在。
流程说明
- 作者从
privates/sec_key文档读取密钥,构建含密钥的链接发送给审核者; - 审核者通过链接中的密钥构建操作路径访问Item内容(无法读取
privates/sec_key文档)。
缺点
审核者的每次Firestore调用都会额外触发exists()验证操作,产生一定开销。
内容的提问来源于stack exchange,提问作者delcree
相关产品推荐
相关产品推荐

