如何允许Firebase RTB模式中的组织对象的“所有者” .read访问组中所有“用户”?

问题描述

给出以下firebase实时数据库架构:

{
  "Organizations": {
    "A": {
      "name": "org a","users": {
        "1": true,"2": true,"3": true
      },"owners": {
        "1": true,}
    },"B": {
      "name": "org B","users": {
        "2": true,"owners": {
        "2": true,"C": {
      "name": "org C","owners": {
        "3": true
      }
    }
  },"Users": {
    "1": {
      "name": "sean","organizations": {
        "A": true,"C": true
      }
    },"2": {
      "name": "sean","B": true,"3": {
      "name": "sean","avatar": "some image url","email": "example@com.com"
      "organizations": {
        "A": true,"C": true
      }
    }
  }
}

使用实时数据库规则,如何允许组织的所有所有者查看组织的用户对象中所有用户的所有用户数据。

换句话说,目标是:通过RTB连接将组织的每个用户的所有数据(名称,电子邮件,头像....)列出给所有者。

我似乎无法辨别如何格式化子规则,数据规则,子规则等.write或.read规则来构造规则集来完成此任务。感谢您的帮助。

解决方法

要允许该组织的所有者阅读/Organizations/$orgId/users,您需要遵守以下规则:

{
  "rules": {
    "Organizations": {
      "$orgId": {
        "users": {
          ".read": "data.parent().child('owners').child(auth.uid).exists()"
        }
      }
    }
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...