【问题标题】:Security rules for posting to a user's subdirectory in Firebase在 Firebase 中发布到用户子目录的安全规则
【发布时间】:2016-03-21 02:25:59
【问题描述】:

以下是我的 Firebase 安全规则:

安全规则.json
{
  "rules": {
    "users": {
      "$uid": {
        ".write": "auth.uid === $uid",
        ".read": "auth.uid === $uid"
      }
    }
  }
}

当我的路径以users 目录结尾时,它工作正常。如:

https://my-firebase.firebaseio.com/users/my-user-id.json

但是当我尝试直接发布到子目录时,如下:

https://my-firebase.firebaseio.com/users/my-user-id/settings.json

它不起作用。

问题

我需要对 security-rules.json 文件(或其他任何内容)做什么才能直接写入用户的子目录?

编辑:

有人建议,“只需扩展您的规则以包含设置。”所以我尝试了这个:

安全规则.json
{
  "rules": {
    "users": {
      "$uid": {
        ".write": "auth.uid === $uid",
        ".read": "auth.uid === $uid"
      },
      "settings": {
        ".write": "auth.uid === $uid",
        ".read": "auth.uid === $uid"
      }
    }
  }
}

这会引发以下错误:

9:30: Unknown variable '$uid'.
10:31: Unknown variable '$uid'.

【问题讨论】:

  • curl --data "param1=value1&param2=value2" https://my-firebase.firebaseio.com/users/my-user-id.json 有效。 curl --data "param1=value1&param2=value2" https://my-firebase.firebaseio.com/users/my-user-id/settings.json 不起作用。
  • 只需扩展您的规则以包含设置
  • @PascalGula:你能举一个简单的例子作为答案吗?
  • 您收到的Unknown variable '$uid'. 错误消息是因为您执行的操作与建议的不同。 @PascalGula 嵌套 settings inside $uid 规则,你把它放在外面。我认为他的方法不会有帮助,但是如果您正确使用他的规则,语法错误就会消失。
  • @Mowzer 它不起作用在这里说几乎总是一件坏事。您期望发生什么以及究竟会发生什么?你遇到了什么错误?

标签: firebase polymer polymer-1.0 firebase-security firebase-hosting


【解决方案1】:

这在模拟器中有效:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid",
        "settings": {
        }
      }
    }
  }
}

【讨论】:

  • 用户一旦拥有了一定级别的读或写权限,就不能在较低级别被取走。见Rules Cascade in the Firebase docs。由于用户已经拥有 $uid 级别的访问权限,因此在 settings 下添加相同的规则不会改变任何内容。
  • 明白了,将通过分隔规则进行相应的修改
  • 这在模拟器中有效,所以我接受并投了赞成票,因为我喜欢向乐于助人的人提供代表。但是,我在现实生活中仍然存在问题(在模拟器之外),所以我正在努力解决这个问题,可能很快就会发布一个后续问题。
  • oki doki,谢谢,我会跟进,因为我也对这个话题感兴趣! :)
  • 根据我刚刚读到的评论,看来我还有更多工作要做才能完全解释这个问题。但我只是想提醒您here's the updated question 和更多解释。
【解决方案2】:

经过进一步测试,我发现OP中包含的安全规则在模拟器中也可以工作:

安全规则.json
{
  "rules": {
    "users": {
      "$uid": {
        ".write": "auth.uid === $uid",
        ".read": "auth.uid === $uid"
      }
    }
  }
}

无需添加额外的规则来更深入地写入节点树。最高级别的权限就足够了。

除此之外:我的问题似乎不是我使用的安全规则。我必须做更多的研究、实验和测试。

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 2020-02-02
    • 2016-03-26
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2018-10-17
    相关资源
    最近更新 更多