【发布时间】: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