获取当前登录用户的详细信息

时间:2017-12-09 09:43:48

标签: java android firebase firebase-realtime-database

我正在尝试获取用户的管理员权限,无论是真还是假。我不认为我得到当前登录的用户详细信息,下面的代码是我所拥有的,但是当我调试它时,似乎它遍历firebase表中的所有用户,如果有的话,它将按钮设置为可见

 databaseUsers = FirebaseDatabase.getInstance().getReference("users");
    //  buttonAddProducts.setVisibility(View.GONE);
    //   buttonAddBeverages.setVisibility(View.GONE);

    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference currentUserReference = databaseUsers.child(uid);
    currentUserReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot userSnapshot) {
            if (userSnapshot.exists()) {
                User user = userSnapshot.getValue(User.class);

                if(user.getAdminUser() == true)
                {
                    buttonAddProducts.setVisibility(View.VISIBLE);
                    buttonAddBeverages.setVisibility(View.VISIBLE);
                }
            }
            else{
                Log.i("myInfoTag", "Connection problem");
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException(); // don't ignore exceptions
        }
    });

2 个答案:

答案 0 :(得分:1)

首先,当我们提到Firebase时,我们不能谈论表格。在NoSQL数据库中没有表。只有键和值对。

要解决您的问题,我需要通过在名为userAdmins的Firebase数据库中添加新节点来重新编辑数据库。将用户添加到数据库中并且也是管理员时,请在此新部分中添加他。您的新节点应如下所示:

Firebase-root
    |
    --- userAdmins
            |
            --- userId1: true
            |
            --- userId2: true

此练习名为 denormalization ,为此我重新命名,您会看到此视频Denormalization is normal with the Firebase Database。如果您看到此视频,您将对这种做法有更好的了解。

要验证用户是否为管理员,只需在exists()对象上使用DataSnapshot方法,如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("userAdmins").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists()) {
            //do something
        } else {
            //do something else
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(eventListener);

其中uid是您要验证的用户的ID是否为管理员。

答案 1 :(得分:0)

您正在侦听所有用户,然后循环播放这些用户,如果其中任何一个是管理员,则会显示按钮。

如果您只想显示当前用户的按钮,则只应查询当前用户。在您当前的数据模型中,可以是:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference currentUserReference = databaseUsers.child(uid);
currentUserReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            User user = venueSnapshot.getValue(User.class);

            if(user.getAdminUser() == true)
            {
                buttonAddProducts.setVisibility(View.VISIBLE);
                buttonAddBeverages.setVisibility(View.VISIBLE);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore exceptions
    }
});

这不仅可以为您提供所需的行为,还可以大幅减少应用使用的带宽。