Firebase:如何为两层随机ID深度的子节点编写安全规则
嘿,我来帮你搞定这个Firebase Realtime Database安全规则的问题!针对你描述的people/UserID1/UserID2节点结构,我整理了完全符合你需求的规则实现,还附上了详细的逻辑拆解:
完整安全规则代码
{ "rules": { "people": { "$userId1": { // 控制people/$userId1节点的读写权限 ".write": "auth.uid === $userId1 || auth.uid === $userId2", ".read": "auth.uid === $userId1 || auth.uid === $userId2", "$userId2": { // 验证该节点必须包含指定内容(示例为必填字符串字段,可按需修改) ".validate": "newData.hasChild('relationship') && newData.child('relationship').isString()" } } } } }
规则逻辑拆解
针对
people/$userId1节点的读写权限:
这里用.write和.read规则直接判断当前认证用户的ID(auth.uid)是否等于路径中的$userId1或$userId2——完全满足你要求的仅允许这两个用户读写该节点的需求。规则里的$userId1和$userId2是通配符,会自动匹配路径里的实际用户ID。针对
people/$userId1/$userId2节点的内容验证:
我用.validate规则来确保节点最终包含你需要的内容,示例中要求必须存在一个名为relationship的字符串字段。你可以根据实际需求修改这个条件:- 如果需要数值类型,改成
newData.child('relationship').isNumber() - 如果需要固定取值,加
newData.child('relationship').val() === 'friend' - 如果需要多个必填字段,用
&&串联多个hasChild()判断
- 如果需要数值类型,改成
关键注意事项
- 确保你的用户已经通过Firebase Auth完成认证,因为规则依赖
auth.uid来识别用户身份,未认证的用户会被拒绝所有操作。 - 如果你的“必须最终包含一个……”的需求有更具体的细节(比如字段名、格式要求),直接调整
.validate里的逻辑即可。
内容的提问来源于stack exchange,提问作者Hasan Bou Taam
相关产品推荐
相关产品推荐

