Правила Firebase для социального приложения - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь расширить социальный андроид aap , в настоящее время его правила общедоступны, его структура данных примерно такая,

{
  "posts" : {
    "postId1" : {
      "authorId" : "abcd",
    },
    "postId2" : {
      "authorId" : "abcd",

    },
    "postId3" : {
      "authorId2" : "wxyz",

    },
    "postId4" : {
      "authorId2" : "wxyz",
    }
  }
}

Я хочу разрешить аутентифицированному пользователю создавать и удалять свои собственные сообщения в узле "posts" Я попробовал это,

{
  "rules": {
        ".read":"auth.uid != null",
        ".write":false,
      "questions": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
}}

Но это не позволяет пользователю создавать сообщения, хотя пользователь может редактировать или удалять свои ранее существовавшие сообщения в узле "posts", кажется, что в узле "posts" нет разрешения на запись. Но если я разрешаю разрешение на запись для «записей», то из-за каскадных правил каждый аутентифицированный пользователь может получить доступ к данным других. Как мне достичь желаемой функциональности?

1 Ответ

0 голосов
/ 29 апреля 2018

Сначала ознакомьтесь с правилами для базы данных реального времени: https://github.com/firebase/bolt

Этот инструмент облегчает написание правил.

А для ваших правил вот пример, который позволит только автору обновлять пост:

{
  "rules": {
    ".read": "auth.uid != null",
    "posts": {
      "$postId": {
        ".write": "data.val() == null && newData.child('uid').val() == auth.uid || data.val() != null && newData.val() != null && data.child('uid').val() == auth.uid || data.val() != null && newData.val() == null && newData.child('uid').val() == auth.uid"
      },
      ".read": "auth.uid != null"
    }
  }
}

и эквивалент болта пожарной базы ниже:

path / {
    read() {auth.uid != null}
}

path /posts {
    read() {auth.uid != null}
    /{postId}{
    create() { this.uid == auth.uid}
    delete() { this.uid == auth.uid}
    update() { prior(this.uid) == auth.uid}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...