Я добавляю динамический ключ json к пользовательским утверждениям пользователя и хочу использовать этот ключ / значение, чтобы позволить пользователю писать на узле.
Пример: Вот как я могу это сделать с помощью администратора FirebaseSDK для nodejs.
// I get the user object
admin.auth().getUser(uid).then(userRecord => {
let claims = userRecord.customClaims; // current user claims
// I add the new key/value to the current claims object
// shop.id is obtained with DatabaseReference.push()
//Note: I prepend a 'B' to prevent a JSON key starting with '-'
claims[`B${shop.id}`] = someData[userRecord.uid] === 'manager' ? 1 : 0;
// I update the user claims
return admin.auth().setCustomUserClaims(userRecord.uid, claims);
});
В правилах безопасности базы данных в реальном времени у меня есть узел, где я контролирую разрешение на запись со следующим правилом:
Нет другого правила вне области действия mNode
{
"mNode":{
"$shopId":{
".read": "auth.uid!==null"
".write":"auth.token['B'+$shopId]===1"
}
}
}
На андроиде я пытаюсь записать путь.
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("mNode").child("theShopIdUsedInClaims").setValue(t)
.addOnCompleteListener(task -> {
if(task.isSuccessful()){
listener.onSuccess();
}else {
listener.onError(task.getException(),ref.toString());
}
});
Заявки успешно установлены для токена пользователя.Я проверяю их путем «строкового преобразования» объекта утверждений пользователя.Но доступ для записи не предоставляется.
Спасибо за вашу помощь и извините за мой плохой английский.