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

如何在用户购买虚拟物品后授权其访问对应数据库Item对象?

实现动态授权的数据库安全规则方案

你可以通过跨节点验证用户购买记录的方式实现动态授权,无需手动维护授权列表,完全基于用户已有的Purchases记录自动判断访问权限。以下是针对不同数据库类型的具体实现方案:

针对Firebase Realtime Database的规则

{
  "rules": {
    "Reference": {
      "Item": {
        "$itemId": {
          // 用户已登录且购买过该物品时,允许读取对应Item信息
          ".read": "auth != null && root.child('Users').child(auth.uid).child('Purchases').child($itemId).exists()"
        }
      }
    },
    "Users": {
      "$userId": {
        // 仅允许用户修改自己的节点
        ".write": "auth != null && auth.uid === $userId",
        "Purchases": {
          // 仅允许用户更新自己的购买记录
          ".write": "auth != null && auth.uid === $userId"
        }
      }
    }
  }
}

针对Firebase Firestore的规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Reference/Item/{itemId} {
      // 验证用户登录状态及购买记录存在性
      allow read: if request.auth != null && exists(/databases/$(database)/documents/Users/$(request.auth.uid)/Purchases/$(itemId));
    }
    match /Users/{userId}/Purchases/{itemId} {
      // 限制用户仅能操作自己的购买记录
      allow write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

核心逻辑说明

  • 动态授权的关键:规则会自动检查当前登录用户的Users/{uid}/Purchases节点下是否存在对应物品的ID,只要购买记录存在,用户就自动获得该物品信息的读取权限,无需手动修改规则。
  • 数据一致性要求:确保Purchases中存储的物品ID与Reference/Item下的物品ID完全一致,否则规则无法正确匹配。
  • 权限边界:严格限制用户仅能修改自己的Users节点和购买记录,避免越权操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:10:36