динамические ключи пользовательских требований firebase в правилах безопасности баз данных в реальном времени - PullRequest
0 голосов
/ 13 марта 2019

Я добавляю динамический ключ 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());
            }
        });


Заявки успешно установлены для токена пользователя.Я проверяю их путем «строкового преобразования» объекта утверждений пользователя.Но доступ для записи не предоставляется.

Спасибо за вашу помощь и извините за мой плохой английский.

...