【问题标题】:Firebase Authentication Rules Using the Data Inside使用内部数据的 Firebase 身份验证规则
【发布时间】:2018-05-09 06:01:07
【问题描述】:

如何验证只有拥有数据内容的用户才能写入/删除节点?我的数据结构如下所示:

project-xxxxxxxx
   Messages
      Chat-Record-001
         User1: "B3xUEsPRZ1XhIAhDQo1DEyLZlSX2"
         User2: "PR70j0ou4JdDWf8S5X9h9BUevpo1"
         Message: "This is a test message!"
      Chat-Record-002
         User1: "RiGLv20W7UTFZSCAATOHsk9gDfg1"
         User2: "GG50j0ou4JdDWf8S5X9h9BUevpo1"
         Message: "This is a test message!"
      Chat-Record-003
         User1: "gBTtYUAKCIVZkYGY7gTUNidSIfv1"
         User2: "gmIOwzJwvSOOQc1ADMrHI6phGIv2"
         Message: "This is a test message!"
      Chat-Record-004
         User1: "B3xUEsPRZ1XhIAhDQo1DEyLZlSX2"
         User2: "gmIOwzJwvSOOQc1ADMrHI6phGIv2"
         Message: "This is a test message!"

我应该如何编写规则以便用户 B3xUEsPRZ1XhIAhDQo1DEyLZlSX2 只能写入 Chat-Record-001Chat-Record-004gmIOwzJwvSOOQc1ADMrHI6phGIv2 只能写入Chat-Record-003Chat-Record-004。 User1 和 User2 字符串来自 createUserWithEmailAndPassword。

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    这样的事情应该可以解决问题:

    {
      "rules": {
        "Messages": {
          "$chatid": {
            ".write": "data.child('User1').val == auth.uid || data.child('User2').val == auth.uid"
          }
        }
      }
    }
    

    请注意,这只允许他们更新现有消息。如果您还希望用户能够编写新消息,只要他们的 UID 在 User1User2 中,那就是:

    ".write": "newData.child('User1').val == auth.uid || newData.child('User2').val == auth.uid"
    

    【讨论】:

    • 是的,我认为这可以解决问题。我真的不在乎是否会有数百万条消息,只要他们只能在他们所在的消息线程上编辑/写入。
    猜你喜欢
    • 2020-09-24
    • 2020-05-10
    • 2018-08-25
    • 2021-01-22
    • 2018-01-17
    • 1970-01-01
    • 2020-12-27
    • 2016-06-08
    • 2019-07-10
    相关资源
    最近更新 更多