繁体   English   中英

如何使用 boolean 值验证 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)

另请参阅有关通配符捕获变量的 Firebase 文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM