Доступ к полю в документе правила Firestore не работает

Я пишу правила Firestore для приложения для Android, которое я сейчас разрабатываю. У меня проблемы с написанием правил безопасности. Я хочу иметь набор редакторов, в которых каждый документ назван в честь идентификатора пользователя и хранит в себе роль этого идентификатора пользователя.

Путь к документу для каждого редактора: users/(userId доступа к данным владельца)/editors/(userId пользователя, осуществляющего доступ). Поле, содержащее роль, — «Роль», и в настоящее время единственная роль — «Владелец». Таким образом, он отображается в базе данных как Роль: «Владелец».

match /users/{userId} {
    allow read, write: if getUserData().Role == "Owner";   
}

function isSignedIn() {
    return request.auth != null;
}

function getUserData()
{
    return get(/databases/$(database)/documents/users/$(userId)/editors/$(request.auth.uid)).data;
}

Имитация чтения и записи в настоящее время запрещена.

Пожалуйста, используйте тег android-studio только для вопросов о самой Android Studio IDE. Если у вас есть вопросы о программировании для Android в целом, используйте тег android.

Frank van Puffelen 29.05.2019 23:12
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Учитывая, как ограничены ваши функции, вам нужно будет передать userId в вызов getUserData:

match /users/{userId} {
    allow read, write: if getUserData(userId).Role == "Owner";   
}

function isSignedIn() {
    return request.auth != null;
}

function getUserData(userId)
{
    return get(/databases/$(database)/documents/users/$(userId)/editors/$(request.auth.uid)).data;
}

Мне непонятно, почему database и request.auth.uid попали в область действия этой функции, а userId нет. Хочешь объяснить?

racs 06.10.2019 02:12

Другие вопросы по теме