如何配置Firebase与Firestore规则实现仅VIP3用户可写入post集合
场景需求
- Firestore 权限要求:仅VIP3等级用户(用户数据存储路径为
users/{uid},VIP标识字段为vip3)可写入post集合,其余集合所有登录用户可正常读写,无VIP等级限制 - Firebase Realtime Database 权限要求:仅VIP3等级用户(用户数据存储路径为
id/{uid}/Profile,VIP标识字段为vip3)可写入post节点,其余节点所有登录用户可正常读写,无VIP等级限制
Firestore 安全规则正确写法
原有规则存在3个核心问题:路径匹配错误(误匹配Users集合而非目标post集合)、VIP判断逻辑错误(读取待写入资源的字段而非当前用户自身存储的VIP状态)、未配置其余集合的默认开放权限。
正确规则代码如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 校验用户已登录 function isAuthenticated() { return request.auth != null && request.auth.uid != null; } // 校验当前登录用户为VIP3 function isVip3() { return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.vip3 == true; } // post集合权限:登录可读,仅VIP3可写 match /post/{docId=**} { allow read: if isAuthenticated(); allow create, update, delete: if isAuthenticated() && isVip3(); } // 其余所有路径:登录用户即可正常读写 match /{path=**} { allow read, write: if isAuthenticated(); } } }
规则说明:Firestore安全规则遵循精确路径优先匹配逻辑,post集合的专属规则优先级高于全局通配规则,不会出现权限冲突
Firebase Realtime Database 安全规则正确写法
原有规则存在3个核心问题:路径匹配错误(未匹配目标post节点)、VIP判断的节点路径偏差、未配置其余节点的默认开放权限。
正确规则代码如下:
{ "rules": { // post节点权限:登录可读,仅VIP3可写 "post": { ".read": "auth != null", ".write": "auth != null && root.child('id').child(auth.uid).child('Profile').child('vip3').val() === true" }, // 其余所有节点:登录用户即可正常读写 "$otherPath": { ".read": "auth != null", ".write": "auth != null" } } }
规则说明:Realtime Database安全规则遵循浅路径优先匹配逻辑,post节点规则需放在全局通配规则之前,保证VIP写入限制正常生效
内容的提问来源于stack exchange,提问作者ERIC
相关产品推荐
相关产品推荐

