将管理员特权添加到Firebase规则中



我已经设置了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

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

我通常会在规则中创建一个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集合中读取文档,每个用户可以创建自己的用户文档,但是只有管理员可以删除这些文档。

最新更新