在firebase中,如何在允许访问其他密钥的同时保护特定密钥

时间:2015-05-06 17:16:37

标签: firebase firebase-security

有问题再次解决了火座安全问题。

假设我在firebase中有以下json数据结构

{
  "users" : {
    "userguid001" : {
    "name" : "Test User 1",
    "email" : "test1@test.com",
    "emailverified" : "true",
    "otherinfo1": "some text",
    "otherinfo2": "some more text",
    "otherinfo3": "and some more text"
  },
  "userguid002" : {
    "name" : "Test User 2",
    "email" : "test2@test.com",
    "emailverified" : "true",
    "otherinfo1": "some text",
    "otherinfo2": "some more text",
    "otherinfo3": "and some more text"
  },
  "userguid003" : {
    "name" : "Test User 3",
    "email" : "test3@test.com",
    "emailverified" : "true",
    "otherinfo1": "some text",
    "otherinfo2": "some more text",
    "otherinfo3": "and some more text"
  }
}

}

是否有任何方法可以允许用户(知道userguid)对特定用户分支的一般读/写访问权限,同时禁止对该分支内的特定密钥进行写访问 - 即“emailverified”和“email” ?

我需要这样做,因为我们会进行一些服务器端处理来验证电子邮件地址,我们不希望人们能够输入经过验证的电子邮件地址,而无需通过我们的验证系统。

我认为安全规则与以下内容类似,但这显然不适用于读/写逻辑在firebase中向下流动的方式:

{
  "rules": {
    ".read": false,
    ".write": false,
    "users": {
      "$userid": {
        ".read": true,
        ".write": "true",
        "emailverified" : {
          ".read": true,
          ".write": "false"
        },
        "email" : {
          ".read": true,
          ".write": "false"
        }
      }
    }
  }
}

在这个阶段我能想到的唯一方法是将它分成两个根分支(一个用户可以读/写,一个只能读取)。我已经看过几次提到这种方法,但只是想知道我是否可以做任何事情来保持一个分支。

道歉,如果这是一个重复的问题,但我很难理解许多问题中提出的一些例子,因为它们似乎不符合我的要求。

感谢。

1 个答案:

答案 0 :(得分:3)

由于security rules cascadecannot be used as filters,答案必须是否定的。请查看the guide并在此处保存一些骚扰。

解决方案是将私有和公共数据拆分为自己的路径。

/user_profiles/$user_id/email_verified
/private_user_data/$user_id/email