【问题标题】:Firebase - User Based Rule Access On Another PathFirebase - 另一条路径上基于用户的规则访问
【发布时间】:2015-10-11 19:38:10
【问题描述】:

我希望仅当用户在其帐户下列出此设备 ID 时才允许对 firebase 中的设备列表进行读取访问。

正如 Anant 在此处找到的答案中所推荐的:Security Rules - lists of data that can be read? 我实现了这个 firebase 数据结构:

{ 
  devices: { 
    111: {status: 10}, 
    222: {status: 5}
  }, 
  users:  {
    aaa: { 
      name: 'Jim', 
      devices: { 
        111: {name: 'Test Device'}
      } 
    } 
    bbb: { 
      name: 'Jane', 
      devices: { 
        111: {name: 'Test Device'},
        222: {name: 'New Device'}
      } 
    } 
  }
}

为了澄清输出,名为 Jim 的用户“aaa”应该只能从设备列表中读取设备 ID“111”并获取它的子元素。名为 Jane 的用户“bbb”可以看到设备“111”和“222”及其子元素

所以我实施了几次规则试验,结果如下:

{
    "rules": {
        "users":{
          "$user_id":{
            ".read": "auth.uid == $user_id",
            "devices": {
              "$devices_id":{
                ".read":true
              }
            }
          }
        },
        "devices":{          
          "$devices_id":{
            ".read": "root.child('users').child(auth.uid).child('devices').hasChild('$devices_id')",
            ".write": false
          }
        }
    }
}

读取设备数据时,此规则应查看 /root/users//devices/$devices_id 并查看该 device_id 是否存在于发出请求的用户下。然后允许读取该记录。根据上面链接的帖子,这应该是可能的,但是帖子没有说明应该为“对话”的主列表(在我的情况下是设备)设置什么权限...... Anant 只说“确保在适当地列出顶级对话”。有人可以澄清如何做到这一点吗?

根据上述规则,我只获得拒绝这些请求的权限。我也试过: "root.child('users').child(auth.uid).child('devices').child('$devices_id').exists()" 这也不起作用......

我们将不胜感激有关此过程的任何指导。我也对实现这一点的其他数据结构和规则结构持开放态度。这是一个新项目,现阶段可以修改。

谢谢!

【问题讨论】:

  • 如果您在模拟器中尝试这些规则,您会得到什么?此外,$devices_id 不应在 hasChild() 中使用引号(这是字符串文字,而不是变量)。
  • 用这个是强码!做得好,字符串文字是问题所在。一切都在模拟器中运行,我将很快在这里进行测试。感谢你的回答。创建一个答案,以便我可以选择它作为正确的答案!

标签: path firebase rules


【解决方案1】:

感谢@Kato!上面的实现是正确的,除了 $device_id 周围的字符串文字。

变化

.hasChild('$devices_id')

.hasChild($devices_id)

修复了问题,只允许从顶层设备结构中读取用户下分配的设备。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2018-03-17
    • 2017-03-10
    • 1970-01-01
    • 2018-05-30
    • 2022-07-28
    • 1970-01-01
    相关资源
    最近更新 更多