【问题标题】:How to get newData key for Firebase Rules?如何获取 Firebase 规则的 newData 键?
【发布时间】:2017-06-15 09:38:56
【问题描述】:

这里有一个非常简单的用户规则:

{
  "rules": {
    "users": {
      ".read": true,
      "$userId": {
        ".write": "auth.uid === $userId"
      }
    }
  }
}

当然,当我们想创建新用户时它不起作用,这是我的问题,如何创建将检查users 路径中的新键是否与auth.uid 相同的规则?

更新

我需要在".read": true 下方的".write": "auth.uid === $userId" 这样的行,但这里是不可能的,因为它看不到$userId 变量。

就我而言,这应该可行:

  • 位置:/users
  • 数据:{ "user1" : { "name": tester" } }
  • UID:user1

但这不应该:

  • 位置:/users
  • 数据:{ "user1" : { "name": tester" } }
  • UID:user2

【问题讨论】:

  • 此规则确保只有当前登录的用户可以编辑自己的数据。我不太明白您对 new 键的引用。您能否举一个您希望允许的代码示例以及您希望禁止的代码示例?
  • 你试过你的规则了吗?它只允许用户在他/她的userId 下创建、更新或删除数据。这似乎就是你想要的。
  • 但是不允许先创建userId。
  • Firebase 数据库中的键/路径是在数据写入该路径时自动创建的。您当前的规则允许使用第一个数据写入路径并禁止第二个数据。除非您有一些实际代码失败,但应该允许这样做,否则我们无能为力。

标签: android firebase firebase-authentication firebase-security


【解决方案1】:
{
  "rules": {
    "users": {
      ".read": true,
      ".write": "newData.hasChild(auth.uid) || data.hasChild(auth.uid)",
        "$userId": {
          ".write": "auth.uid === $userId"
        }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多