如何使用布尔值验证 firebase 规则?
how to validate firebase rule with boolean value?
我在 firebase 中设置了规则来验证是否是管理员,这是规则
"rules": {
"Users": {
"$uid": {
".read": "auth != null && $uid === auth.uid ||
(root.child('Users').child('$uid').child('admin').val() == true)",
".write": "auth != null && $uid === auth.uid ||
(root.child('Users').child('$uid').child('admin').val() == true)",
}
}
}
问题是我正在尝试从管理应用程序读取和写入,但我无法从应用程序读取和写入,因为我已经尝试过这样可以帮助我找到解决方案.... ?
myViewHolder.paid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
reference.child(getRef(position).getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String postKey = getRef(position).getKey();
if (snapshot.exists()) {
Boolean isadmin = (Boolean) snapshot.child("admin").getValue();
if (isadmin == true) {
reference.child(postKey).child("adminScores").setValue(0);
Toast.makeText(view.getContext(), "Updated", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(view.getContext(), "No such data", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(view.getContext(), "data not found", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(view.getContext(), "Errors", Toast.LENGTH_SHORT).show();
}
});
}
});
这是我的数据库结构,
我想要的解决方案是如何从 firebase 实时数据库获取数据以及从 firebase 获取数据后如何检查、读取数据并将数据写入数据库....
问题是这段代码中的 child('$uid')
:
(root.child('Users').child('$uid').child('admin').val() == true)
这里的'$uid'
只是一个文字串,而你希望它是uid
变量的值。要使用该值,请不要在 $uid
:
周围加上引号
(root.child('Users').child($uid).child('admin').val() == true)
另请参阅 wildcard capture variables 上的 Firebase 文档。
我在 firebase 中设置了规则来验证是否是管理员,这是规则
"rules": {
"Users": {
"$uid": {
".read": "auth != null && $uid === auth.uid ||
(root.child('Users').child('$uid').child('admin').val() == true)",
".write": "auth != null && $uid === auth.uid ||
(root.child('Users').child('$uid').child('admin').val() == true)",
}
}
}
问题是我正在尝试从管理应用程序读取和写入,但我无法从应用程序读取和写入,因为我已经尝试过这样可以帮助我找到解决方案.... ?
myViewHolder.paid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
reference.child(getRef(position).getKey()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String postKey = getRef(position).getKey();
if (snapshot.exists()) {
Boolean isadmin = (Boolean) snapshot.child("admin").getValue();
if (isadmin == true) {
reference.child(postKey).child("adminScores").setValue(0);
Toast.makeText(view.getContext(), "Updated", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(view.getContext(), "No such data", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(view.getContext(), "data not found", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(view.getContext(), "Errors", Toast.LENGTH_SHORT).show();
}
});
}
});
这是我的数据库结构,
我想要的解决方案是如何从 firebase 实时数据库获取数据以及从 firebase 获取数据后如何检查、读取数据并将数据写入数据库....
问题是这段代码中的 child('$uid')
:
(root.child('Users').child('$uid').child('admin').val() == true)
这里的'$uid'
只是一个文字串,而你希望它是uid
变量的值。要使用该值,请不要在 $uid
:
(root.child('Users').child($uid).child('admin').val() == true)
另请参阅 wildcard capture variables 上的 Firebase 文档。