向Firebase规则添加管理员权限

时间:2019-05-02 11:19:27

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

我有设置firebase规则,供用户读取和写入数据库数据。现在,我想为管理员用户添加另一个规则。

我允许用户通过auth.uid访问,并希望为管理员用户设置另一个级别。

这是我当前的规则:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

我正在通过在URL中传递$ uid来获取数据,如下所示:

`https://blablabla.firebaseio.com/users/${uid}/places.json?auth=` + authToken

用户正在通过电子邮件和密码进行注册。有没有办法我可以将特定用户添加为管理员,并设置另一个规则来访问所有数据?

1 个答案:

答案 0 :(得分:0)

我通常会在规则中创建一个isAdmin函数,然后可以从任何地方调用该函数。这是最近项目的示例:

function isAdmin(request) {
  return request.auth.uid == "KqEizsqUQ6XMkUgLUpNxFnzLm4F3"
      || request.auth.uid == "zYXmog8ySOVRrSGVt9FHFr4wJb92"
      || (request.auth.token.email_verified && request.auth.token.email.matches(".*@google.com"))
      ;
}

因此,在此项目中,管理员组由两个UID以及使用已验证的Google电子邮件地址登录的任何人组成。

现在,我可以在其他任何规则中使用此功能:

match /users/{uid} { 
  allow read: if true;
  allow create: if request.auth.uid == uid;
  allow delete: if isAdmin(request);
}

因此任何人都可以阅读users集合中的文档,每个用户可以创建自己的用户doc,但是只有管理员可以删除这些文档。