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

Firebase安全规则配置:仅允许用户修改自身嵌套点赞记录

解决Firebase点赞记录的权限控制问题

你的数据结构是upvotes/{itemId}/{userId},但规则里写的是/votes/{id},首先要修正路径匹配的一致性。

问题分析

  • 第一种规则在/votes/{id}层级设置了allow write: if request.auth != null,这意味着任何认证用户都能直接修改整个itemId节点下的所有数据,包括其他用户的点赞记录,不符合需求。
  • 第二种规则没有在/votes/{id}层级设置任何写权限,Firebase的规则默认拒绝所有操作,所以即使子节点有允许规则,顶层没有放行的话,操作会提示权限不足。

正确的权限规则

根据你的数据结构,分两种数据库类型给出对应规则:

若使用Firestore数据库

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 控制单个用户的点赞节点权限
    match /upvotes/{itemId}/{uid} {
      allow read: if true;
      allow write: if request.auth != null && request.auth.uid == uid;
    }
    
    // 禁止直接修改整个item的点赞集合
    match /upvotes/{itemId} {
      allow read: if true;
      allow write: if false;
    }
  }
}

若使用实时数据库

{
  "rules": {
    "upvotes": {
      "$itemId": {
        ".read": true,
        ".write": false,
        "$uid": {
          ".read": true,
          ".write": "auth != null && auth.uid === $uid"
        }
      }
    }
  }
}

规则说明

  1. 路径匹配与你的数据结构完全对应,确保规则作用到正确节点。
  2. 单个用户的点赞节点{uid}仅对该UID的认证用户开放写权限,保证用户只能修改自己的记录。
  3. 禁止直接操作整个itemId节点,强制必须通过单个用户节点进行点赞/取消点赞操作。
  4. 保留所有读权限为开放状态,符合你之前的需求。

操作注意

确保代码中操作点赞时,是直接写入或删除upvotes/{itemId}/{当前用户UID}节点,而非操作整个itemId节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:06