Как настроить правила безопасности в Cloud Firestore, чтобы вошедший в систему пользователь мог читать только те документы, которые ОНИ разместили - PullRequest
0 голосов
/ 01 февраля 2019

Я пробовал те же вещи, что и документы и другие источники.По какой-то причине это не работает.Все, что мне нужно сделать, это настроить его так, чтобы вошедший в систему пользователь мог только читать свои собственные задачи и расходы.На данный момент я могу получить его только для отображения ВСЕХ документов (независимо от uid) из коллекций или ни одного.Ниже приведены правила безопасности, которые у меня есть.Он получит и отобразит все документы в коллекции задач, но не из коллекции расходов.Я очень запутался.

service cloud.firestore {
match /databases/{database}/documents {
  match /todos/{todo} {
    allow read, write: if request.auth.uid != null
  }
  match /users/{userId} {
    allow create
    allow read: if request.auth.uid == userId
    allow write: if request.auth.uid == userId

    match /expenses/{expense} {
      allow read: if request.auth.uid != null
      allow write: if request.auth.uid == userId
      }
    }
  }

}

компонент настроен так:

import React from 'react'
import TodoSummary from './TodoSummary'
import { Link } from 'react-router-dom'

const TodosList = ({ todos }) => {
  return (
    <div className="section">
      {todos && todos.map(todo => {
        return (
          <Link to={'/todo/' + todo.id} key={todo.id}>
            <TodoSummary todo={todo} id={todo.id} />
          </Link>
        )
      })}

    </div>
  )
}

export default TodosList

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я решил это.Я был так потрясён документами Firebase, показывающими примеры кода, которые выражают, что есть способы настроить его так, чтобы вы могли читать и записывать только свои собственные данные, но есть больше глубины, чем, как упоминал Дуг, вам нужно указать взапрос.Я использовал простой оператор if else, чтобы проверить, что auth.uid соответствует doc.userId, и он отфильтровал результаты только для этого пользователя для меня.Спасибо, Даг, за то, что поставил меня на правильный путь!

0 голосов
/ 05 февраля 2019

Причина, по которой я настаивал на том, чтобы вы показывали свой код, заключается в том, что я подозреваю, что вы ожидаете, что ваши правила безопасности отфильтруют документы из запроса.Они не будут этого делать.Правила безопасности не действуют как фильтры.Из документации :

При написании запросов для извлечения документов имейте в виду, что правила безопасности не являются фильтрами - запросы - это все или ничего.Чтобы сэкономить ваше время и ресурсы, Cloud Firestore сравнивает запрос с его потенциальным набором результатов вместо фактических значений полей для всех ваших документов.Если запрос может потенциально вернуть документы, которые клиент не имеет разрешения на чтение, весь запрос завершается неудачей.

...