Я делаю приложение для Firebase Notes для Android в качестве проекта (я новичок и никогда не делал ничего подобного). Моя проблема на данный момент заключается в том, что каждая сделанная заметка, независимо от того, кто ее сделал, доступна для просмотра каждому пользователю. Я хочу сделать так, чтобы каждый пользователь мог только читать / писать свои собственные заметки, но все правила, которые я нашел и попробовал до сих пор, сделали так, чтобы никакие заметки не отправлялись в базу данных вообще или не показывались. Я тоже пытался поиграться с самим кодом, но все, что я делал, приводило к сбою приложения, но я открыт для предложений.
Проблема (вошел как пользователь 2):
База данных с двумя пользователями и двумя примечаниями:
Я пробовал решения из других подобных постов, как это:
"rules": {
"tasks": {
"$userId": {
".read": "auth.uid == $userId",
".write": "auth.uid == $userId",
}
}
}
}
Но пока никто не работал должным образом.
Создание пользователя:
fAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
fUserDatabase.child(fAuth.getCurrentUser().getUid()).child("basic").child("name")
.setValue(name).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
progressDialog.dismiss();
Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
Toast.makeText(RegisterActivity.this, "User Created", Toast.LENGTH_SHORT);
} else {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
});
} else {
progressDialog.dismiss();
Toast.makeText(RegisterActivity.this, "Error: " + task.getException().getMessage(), Toast.LENGTH_SHORT);
}
}
});
Создание заметки:
(Не на той же странице)
editText = findViewById(R.id.etx);
etd = findViewById(R.id.etdx);
button = findViewById(R.id.btnx);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("posts").push();
Map<String, Object> map = new HashMap<>();
map.put("id", databaseReference.getKey());
map.put("title", editText.getText().toString());
map.put("desc", etd.getText().toString());
databaseReference.setValue(map);
Intent back = new Intent(NewNoteActivity.this, MainActivity.class);
startActivity(back);
}
});
Я хотел бы сделать так, чтобы каждый пользователь мог видеть, редактировать и удалять только те заметки, которые он сделал сам.