Firebase Realtime 中的嵌套节点规则

问题描述 投票:0回答:1
我无法正确管理 Firebase 实时数据库的角色,我希望管理员输入的数据能够被每个人读取,并且用户用户输入的数据只能由具有 auth.uid 的用户看到等于 idUser,我做了很多不同的测试,但我设法获得的唯一结果是要么每个人都看到一切,要么没人看到任何东西。

数据库:

services -JKkhjghjjlhk55454 // this is servicesId category: "veterinarian" idUser: "GHkJjkhg54GGG" roleIns:"user" -Hkhfhgh64545ddddddd category: "veterinarian" idUser: "Hhjhgjhg455545e" roleIns:"admin" users Hhjhgjhg455545e // this is uid name: "John" role: "admin" GHkJjkhg54GGG name: "Anie" role: "user"
规则:

{ "rules": { "services": { ".read": "data.child('$servicesId').child('idUser').val() == auth.uid || data.child('$servicesId').child('roleIns').val() == 'admin'" } } }
    
firebase-realtime-database firebase-security
1个回答
0
投票
规则中的

'$servicesId'

 不起作用,原因有两个:

    您实际上从未在任何地方定义捕获变量
  1. 您将其写为字符串
解决这些问题,会导致:

{ "rules": { "services": { "$servicesId": { // 👈 ".read": "data.child('idUser').val() == auth.uid || data.child('roleIns').val() == 'admin'" } } } }
现在我们在实际的单个服务节点上将规则声明得更深一层,这样就可以访问其正下方的 

idUser

roleIns
 的数据。


请记住,您不能尝试从客户端读取所有

services

 - 因为
规则不是过滤器

© www.soinside.com 2019 - 2024. All rights reserved.