Firebase为不同的子系统提供不同的安全规则

Firebase为不同的子系统提供不同的安全规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我的数据结构是这样的 我希望只有管理员才能创建新用户, 只有管理员才能写入expireDate, 管理员和用户都可以写入其他两个字段 我试过这些dabase规则: 我允许管理员为所有子项编写,但管理员无法创建新用户。我知道firebase数据库规则在级联中覆盖,但如何在这里实现。一旦您在JSON树的某个级别授予用户读写权限,您就不能再在树的较低级别剥夺该权限 这意味着: 更多人可以编写的数据应该位于JSON树的较低级别。 或者,您需要根据需要的访问级别将数据放在不同的顶级注释中。 因为您的数据结

我的数据结构是这样的

我希望只有管理员才能创建新用户, 只有管理员才能写入expireDate, 管理员和用户都可以写入其他两个字段

我试过这些dabase规则:


我允许管理员为所有子项编写,但管理员无法创建新用户。我知道firebase数据库规则在级联中覆盖,但如何在这里实现。

一旦您在JSON树的某个级别授予用户读写权限,您就不能再在树的较低级别剥夺该权限

这意味着:

更多人可以编写的数据应该位于JSON树的较低级别。 或者,您需要根据需要的访问级别将数据放在不同的顶级注释中。 因为您的数据结构没有遵循1的指导,所以这意味着您应该遵循2

比如:

users: {
  user1: { ... },
  user2: { ... }
expiries
  user1: { ... },
  user2: { ... }
然后通过以下方式保护这两个顶级节点之间的访问:

{
  "rules": {
    "users":{
      "$uid": {
        ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",
    },
    "expiries":{
      "$uid": {
        ".read": "root.child('admins').child(auth.uid).exists()",
    }
  } 
}

谢谢,我知道了,但我有一个问题,为什么管理员不能在用户中写入,因为所有字段都对管理员开放??根据您的规则,没有人能够在/用户中写入。在/users/$uid上授予访问权限。但是,如果你在写这些新规则时遇到问题,请打开一个新问题,然后继续。
{
  "rules": {
    "users":{
      "$uid": {
        ".read": "auth.uid == $uid || root.child('admins').child(auth.uid).exists()",
    },
    "expiries":{
      "$uid": {
        ".read": "root.child('admins').child(auth.uid).exists()",
    }
  } 
}