即使在 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()"
...
}
作为管理员,我正在尝试获取用户数据,以便即使通过 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()"
...
}