如何在用户购买虚拟物品后授权其访问对应数据库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
相关产品推荐
相关产品推荐

