У меня в приложении есть утилита просмотра, которая с помощью get получает все документы в коллекции. Каждый документ содержит идентификатор пользователя, который его создал. Я хотел бы реализовать правило безопасности, в котором вы получаете только документы, совпадающие с идентификатором владельца. Это выглядит довольно тривиально, но я не могу заставить его работать.
База данных имеет такую структуру
cars
|
|-documentA
|-documentB
|-documentC
каждый документ:
documentA
|
|
|-fieldA: aaa
|-fieldB: bbb
|-userId: aklsjdaosjfpasf
Правила безопасности в пожарном депо
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{cars=**}/{carId} {
allow read: if request.auth.uid == resource.data.userId;
allow write: if request.auth.uid != null;
}
}
}
РЕДАКТИРОВАТЬ запрос:
query = firestore.collection("cars").limit(10L)
Адаптер Firestore для создания запросов на просмотрщик
public abstract class FirestoreAdapter<VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter<VH> {
private static final String TAG = "Firestore Adapter";
private Query mQuery;
private ListenerRegistration mRegistration;
private ArrayList<DocumentSnapshot> mSnapshots = new ArrayList<>();
public FirestoreAdapter(Query query) {
mQuery = query;
}
public void startListening() {
// TODO(developer): Implement
}
public void stopListening() {
if (mRegistration != null) {
mRegistration.remove();
mRegistration = null;
}
mSnapshots.clear();
notifyDataSetChanged();
}
public void setQuery(Query query) {
// Stop listening
stopListening();
// Clear existing data
mSnapshots.clear();
notifyDataSetChanged();
// Listen to new query
mQuery = query;
startListening();
}
@Override
public int getItemCount() {
return mSnapshots.size();
}
protected DocumentSnapshot getSnapshot(int index) {
return mSnapshots.get(index);
}
protected void onError(FirebaseFirestoreException e) {};
protected void onDataChanged() {}
}