即使在 Firebase 实时数据库中将规则设置为 false,我如何以管理员身份读写

how can I read and write as an admin even if the rules set to false in Firebase Realtime Database

作为管理员,我正在尝试获取用户数据,以便即使通过 firebase 'read'、'write' 集的规则,我也可以 'read' 和 'write'是假的。

users
  |
  "uid"
    |-firstname: "xyz"
    |-lastname: "xyz"
    |-email: "xyz@gmail.com"
    

这是我的规则

 "users": {      
 "$uid": {
    ".read": "auth != null && $uid === auth.uid",
        ".write": "auth != null && $uid === auth.uid"
        }
  }

当我使用 FirebaseRecyclerOptions 从 firebase 检索用户数据时,用户数据仅在我将规则读写设置为 true 时显示,但我希望即使通过 admin 将规则设置为 false 我也可以读写。这可能吗

  FirebaseRecyclerOptions<Model> options =
            new FirebaseRecyclerOptions.Builder<Model>()
                    .setQuery(FirebaseDatabase.getInstance().getReference("Users"), Model.class)
                    .build();

为您的用户对象添加一个布尔值并将其命名为 admin,为除您以外的所有用户将其设置为 false。

现在将其复制到您的 firebasee 规则中:

"users": {      
   ".read": 
      "root.child('users').child($uid).child('Admin').val()",            
   ".write":"  
      "root.child('users').child($uid).child('Admin').val()"

 ,"$uid": {
    ".read": "auth != null && $uid === auth.uid",
        ".write": "auth != null && $uid === auth.uid"
        }
   }

}                
}

就像我在我的用户中的 isActivated 布尔值一样,您可以为您的管理员创建一个名为 isAdmin.Add 的布尔值 class,在您的 class.When 中为其设置和获取方法将它上传到 firebase 你可以读写这个数据。 然后让你的 firebase 规则来完成这项工作。

这取决于“作为管理员”对您意味着什么。例如,如果应用程序管理员只有您,您可以在安全规则中 hard-code 您自己的 UID:

"users": {
  ".read": "auth.uid === 'yourOwnUid'"
  "$uid": {
    ".read": "auth != null && ($uid === auth.uid",
    ".write": "auth != null && $uid === auth.uid"
  }
}

这允许一个用户访问所有 /users,而其他人只能读取该路径下他们自己的子节点。

Hard-coding 这样的 UID 在开发过程中非常有用,因为您可能是唯一的管理员。稍后在接近发布时,您需要在数据库中存储管理员 UID 列表:

"Admins": {
  "yourOwnUid": true,
  "otherUid": true
}

然后您可以在您的规则中检查当前用户的 UID 是否存在于此路径中:

"users": {
  ".read": "root.child('Admins').child(auth.uid).exists()"
  ...
}