【问题标题】:what can I do, I want the data of the firebase is read by everyone but data delete by same auth id person我该怎么办,我希望每个人都可以读取 firebase 的数据,但要由同一身份验证人删除数据
【发布时间】:2020-06-17 16:51:05
【问题描述】:

这是我的 Firebase 实时数据库规则,假设这里有两个设备用户 A 和 B ,A 通过 App 将数据添加到 firebase realTime Database ,所以 B 读取用户 A 添加的数据,同样 B 通过 app 添加数据,所以A读取了那个数据,但是用户A或B都只删除了他输入的自己的数据,A只删除了自己的数据,B只删除了自己的数据,但是两个用户都互相读取了数据(意味着数据是由用户对世界可见)..所以这里适用哪个规则。 例如,Facebook 上的评论部分,该评论对所有人可见,但该评论被管理员或发表该评论的人删除,所以我想要这样,这是我的数据库规则代码

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

这是设置 firebase 和 firebaseUser,孩子是 onCreate 中的数据

FirebaseUser mUser = mAuth.getCurrentUser ();
    String uid = mUser.getUid ();
    myRef = FirebaseDatabase.getInstance ().getReference ( "data" ).child ( uid );
    myRef.keepSynced ( true );//for syncronize the firebase data

数据发送到firebase是这样的,这是我的java代码,用于将数据从firebase显示到UI,我的应用程序是支持谷歌和Facebook登录,

  public void ShowData()
        {


            query1 = myRef.orderByChild ( "dateTime" ); 

            options = new FirebaseRecyclerOptions.Builder < modelClass > ().setQuery ( query1 , modelClass.class ).build ();


            adapter = new FirebaseRecyclerAdapter < modelClass, MyVIewHolder > ( options )
            {
                @Override
                public void onDataChanged() 
                {

                    super.onDataChanged ();
                }

                @Override
                protected void onBindViewHolder(@NonNull final MyVIewHolder holder , final int position , @NonNull modelClass model) 
               {

                        holder.setFoodPost ( model ); //for set all data to view

当用户长时间点击数据时打开,这里删除窗口(alertDialog)打开并删除特定数据,但是当其他用户想要删除其他人数据时我希望删除窗口不打开,表示用户只能删除自己的数据(当用户想要删除自己的数据时,删除警报对话框打开),如果他想删除其他人的数据,删除窗口将不会打开,所以我应该在这里做什么,并且 此代码也在 onBilndViewHolder 中

     //for longPress on particular view

                    holder.itemView.setOnLongClickListener ( new View.OnLongClickListener () {
                        @Override
                        public boolean onLongClick(View view) {

                            post_key = getRef ( position ).getKey ();

                                openDeleteWindow ();

                                 return true;
                            }

                        }
                    } );



                @NonNull
                @Override
                public MyVIewHolder onCreateViewHolder(@NonNull ViewGroup parent , int viewType) 
{
                    View v = LayoutInflater.from ( parent.getContext () ).inflate ( 
                   R.layout.recycler_view_item_layout , parent , false );
                    Log.d ( "firee","orCreate" );
                    return new MyVIewHolder ( v );



                }
            };
            adapter.startListening (); //if you use FirebaseRecyclerAdapter then this is nessasry

            recyclerView.setAdapter ( adapter ); //set adapter into recyclerView

这是我的火力基地

 datamyapp-cbfba

    |-- data
        |-WNOAsWDaVlQXq2DssE9AsUCw1jB3    <- Device A (googleSignInKey)
        | |-M1UGU8pMJiNGd5zsG_r
        |   |-college:"ABES"
        |   |-contact:"956379797"
        |   |-dateTime:"03-03-2020 12:52:05"
        |   |-food: "Burger"
        |   |-name:"Vishal"
        |
        |-XiFNOWYYFHhjRdHx7AGOtchjN4x2   <- Device B (googleSignInKey)
          |-M1UGqWNjWVIlbtluD6D
           |-college:"TMU"
           |-contact:"9578379797"
           |-dateTime:"03-03-2020 12:50:05"
           |-food: "Pizza"
           |-name:"Ankit"

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-security


    【解决方案1】:

    要将数据写入firebase,您应该分别为A和B写入数据。对于从firebase读取数据,您可以读取A或B写入的所有数据。因此,删除您没有问题。数据分开保存。 A删除他/她的数据,B删除他/她的数据。

    【讨论】:

    • 先生,这里有很多用户在应用程序中,所以我希望数据由每个人存储,每个人都显示,但每个人只删除自己的数据而不是其他人的数据
    • 没问题,正如我所说的阅读你阅读所有写入数据库的数据。对于写入、删除和更新,每个用户都可以访问数据库。所以我不能删除其他人的数据。
    【解决方案2】:

    看看这个:

    这里保存了两个用户的数据(“keshtynejat”和“mohammadmoeingolchin”)。如您所见,数据完全分开保存。你如何读取一个用户的数据?!您可以以相同的方式读取所有用户的数据。

    【讨论】:

    • 谢谢先生,但我有一个困惑,先生,这里的数据不会被除该数据所有者之外的其他人删除吗? ('keshtynejat' & 'mohammadmoeingolchin) 只删除自己的数据并读取对方的数据?
    • 是的,他们只能删除自己的数据。当然,您可以授予用户访问所有数据的权限,并且每个人都可以删除另一个人的数据。这一切都取决于您的要求。
    • 不,先生,告诉我一件事先生,在您的代码中,firebase 实时数据库规则是什么?
    • 先生,我们如何为不同的用户创建不同的孩子?先生,我是 android 新手,所以我有很多错误,所以先生。
    • 和先生一样,在您的代码中,该人的所有数据都进入人名智利,我有不同用户的不同 UID,所有数据进入该用户 UID,规则是 { "rules": { ".read": true, ".write": true } } 但数据没有显示给其他用户,进入我的代码并查看 firebase 数据库代码,每个人都有不同的 uID,数据是进入 uID
    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 2019-07-21
    • 1970-01-01
    • 2019-08-18
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多