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

Firestore文档特定Key写入权限配置——点赞/点踩系统场景

Firestore点赞/点踩系统实现与安全规则配置

你的这个数据结构思路很靠谱啊——用项目ID作为votes集合的文档ID,再以用户UID为键存储对应的投票值,不管是查某个项目的总投票数,还是判断特定用户有没有投过票,都能高效实现。

针对你要限制用户只能修改自己投票的需求,我给你写了对应的Firestore安全规则,直接用就行:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /votes/{votedDocId} {
      // 允许公开读取投票记录,要是需要仅限登录用户查看,改成request.auth != null就行
      allow read: if true;
      
      // 核心写入规则:确保用户只能操作自己的投票字段
      allow write: if 
        // 限制每次只修改一个字段,防止批量篡改
        request.resource.data.size() == 1 
        // 保证操作的字段是当前用户的UID
        && request.auth.uid in request.resource.data
        // 限制投票值为数字(比如1=点赞,-1=点踩)
        && request.resource.data[request.auth.uid] is number;
    }
  }
}

规则细节说明:

  • request.resource.data.size() == 1:避免用户一次提交多个字段的修改,防止误操作或者恶意批量改动
  • request.auth.uid in request.resource.data:确保用户只能创建或修改以自己UID命名的键,完全隔绝了操作他人投票的可能
  • request.resource.data[request.auth.uid] is number:约束投票值的类型,如果你想更严格,比如只能是1或-1,可以把这条改成request.resource.data[request.auth.uid] in [1, -1]

另外补充两点实用建议:

  • 这个规则默认允许用户修改自己的投票(比如从点赞改成点踩),要是你想禁止修改、只能投一次,可以额外加逻辑判断原始文档里是否已经存在该用户的UID
  • 读取规则如果不需要公开,记得改成request.auth != null,只允许登录用户查看投票数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:32:48