如何向Firebase中的指定用户授予写权限?

时间:2018-09-08 21:44:05

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

我有一个移动应用程序,可以从Firebase服务器读取数据,而无需进行Firebase登录/身份验证(帖子和新闻),并且我想创建一个管理网页,可以在其中登录,添加或修改新闻,因此我需要在那里写权限。我的规则目前是:

{
  "rules": {
    ".read": true,
    ".write": "auth !== null && ?????
  }
}

我可以写类似"user.emailAddress == 'mail@example.com'"的东西吗?

3 个答案:

答案 0 :(得分:2)

您可以在数据库上创建用户表,例如

{
  "users":{
     "your UID":{
        "isAdmin": true
      }
   }
}

然后修改规则:

{
  "rules": {
    ".read": true,
    ".write": "auth.uid != null && root.child("users").child(auth.uid).isAdmin === true"
  }
}

答案 1 :(得分:0)

您可能希望先阅读有关securing user data的文档。这里有很多要知道的。

一种可能性是使用已知用户的uid来限制访问。 auth.uid变量包含uid。

".write": "auth.uid == 'the-known-uid'"

您还可以使用auth.token访问有关用户的其他信息,包括电子邮件地址(可能不存在):

".write": "auth.token.email == 'the@email.address'"

您还可以使用自定义身份验证令牌,该令牌也为covered in the documentation

答案 2 :(得分:0)

创建数据库:

   {
      "users":{
         "your UID":{
            "isAdmin": true
          }
       }
    }

设置规则:

错误:

    {
      "rules": {
        ".read": true,
        ".write": "auth.uid != null && root.child("users").child(auth.uid).isAdmin === true"
      }
    }

对:

    {
      "rules": {
        ".read": true,
        ".write": "auth.uid != null && root.child('users').child(auth.uid).child('isAdmin').val() === true"
      }
    }