Firebase添加用户但禁用任何修改

时间:2016-03-24 17:27:10

标签: firebase firebase-security

遇到了这个问题:我想允许用户使用firebase在我的网页上注册,因此我计划了以下结构:

users : {
    user0 : { //user specific data },
    user1 : { //... }
    ...
}

一切正常(写作,阅读......),直到我更改安全规则。我想更改它们,因为我希望用户只能注册,而不是有权删除他们或其他可能的用户帐户。但我找不到任何有用的东西。以下是我目前留下的内容:

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

我想知道如何设置规则,以便用户添加新帐户。

我将不胜感激任何帮助!

Thaanks:)

编辑:这是我想要通过上述规则实现的目标,也许以下使用模拟器的示例将使我的观点清楚。

我要做的第一件事就是让用户在/ users节点注册。因此,我在模拟器中选择了Custom Auth点:

{provider:' anonymous',uid:' 002a448c-30c0-4b87-a16b-f70dfebe3386' }。

现在,如果我选择"模拟写"并给出路径/用户和以下键值对:

{" 002a448c-30c0-4b87-a16b-f70dfebe3386":{" 1" :{" a" :" b"}}}

我收到以下消息(参见Result_2),它告诉我,我无法写入/ users因为没有允许它的写规则,我完全理解上述安全规则配置,但我不知道知道如何更改它们,以便我能够像上面那样编写键值对,同时仍然允许每个用户在那里写入。即使用uid:002a448c-30c0-4b87-a16b-f70dfebe3386的用户只要经过身份验证,就可以使用上述规则写入相应的值(参见Result_1)。

E.g。 Custon Auth认证用户写入他的入口:(完美预期的工作)

{provider:' anonymous',uid:' 002a448c-30c0-4b87-a16b-f70dfebe3386' }。

与前一次一样。现在,"模拟写"在路上:

/用户/ 002a448c-30c0-4b87-A16B-f70dfebe3386

Result_1:

尝试将{" 4":{" name":" fred"}}写入/ users / 002a448c-30c0-4b87-a16b-f70dfebe3386 auth = {"提供商":"匿名"," uid":" 002a448c-30c0-4b87-a16b-f70dfebe3386"}

/

/ users

/users/002a448c-30c0-4b87-a16b-f70dfebe3386:.write:" auth!== null&& auth.uid === $ uid" =>真的

允许写入。

Result_2:将用户写入/ users节点失败,即无法注册。我希望这里能够将用户添加到/ users但无法修改/删除/ users中的用户。请参阅下面的模拟器输出。

尝试写{" 002a448c-30c0-4b87-a16b-f70dfebe3386":{" 1":{" a":" b&# 34;}}} to / users with auth = {" provider":" anonymous"," uid":" 002a448c-30c0-4b87-a16b -f70dfebe3386"}

/

/ users没有.write规则允许操作。

写作被拒绝。

1 个答案:

答案 0 :(得分:1)

权限级联 - 一旦您授予用户/users的权限,就无法再删除/users/$uid上的权限。

解决方案是仅授予最低级别的权限,因此在您的情况下:

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