可以使用 Firebase 权限仅公开 Firebase 数据库中对象的某些字段以进行读取访问吗?

Possible to expose only certain fields of an object in the Firebase DB for read access using Firebase permissions?

让我们考虑可以表示 Firebase 数据库的 JSON 对象文字的以下结构:

{
  "users": {
    "user0": {
      "name": "Mike",
      "age": 20,
      "relationship": "married",
      "friends": [...]
    },
    "user1": {
      "name": "Sarah",
      "age": 20,
      "relationship": "single",
      "friends": [...]      
    },
    ...
  }
}

使用 Firebase permission system,是否可以使 nameage 每个人 可读(通过将相应的权限设置为 true) 但 relationship 状态只对更细粒度的观众可见,例如用户 friends.

我要如何编写 security-rules.json 才能实现此目的?

就个人而言,对于您希望所有用户阅读的数据和您只希望部分用户阅读的数据,我会有不同的路径。这现在看起来可能很痛苦,但是在您继续开发应用程序的过程中,您很有可能会添加或更改用户的属性。每次执行此操作时,您都必须添加到数据库安全规则中。

也就是说,如果您仍想使用数据库安全规则来处理权限,您可以为每个要保护的路径编写规则。例如:

"rules": {
    "users": {
        "$user": {
            "relationship": {
                ".read": <some condition>
            }
        }
    }
}

查看 the documentation 示例。