Правила Firestore, получить ресурс от родителя? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь установить правила безопасности для своего приложения.

У меня есть коллекция, которая выглядит следующим образом:

Scores
  |          
  |                  
  |                  
  |
  |___ AutoID______________history
  |     |___value: 22         |__20190506
  |     |___userID: "abc"     |___dateString:20190506
  |___ AutoID                 |___value:22
          |___value: 45
          |___userID: "def"

Я думал, что это былохорошо, сделав это:

match /scores/{docID=**} {
    allow read: if userIsLoggedIn();
    allow create, update: if request.resource.data.userID == request.auth.uid;
    allow delete: if resource.data.userID == request.auth.uid;
}

Оценка может быть достигнута пользователем, но не Collection «история». Я думаю, что проблема исходит от resource.data.userID.

«История» Collection не может получить доступ к resource.data.userID. Я хотел бы получить доступ к resource.data.userID из родительского документа.

Возможно ли это сделать?

1 Ответ

1 голос
/ 29 сентября 2019

Если поле документа, которое вы хотите использовать, отсутствует в документе, который проверяется на доступ для чтения / записи, соответствующий правилу, вам придется get() другой документ (даже если оннаходится в родительском пути), используя его полный путь, чтобы вы могли использовать значения его полей в своем правиле. Узнайте больше в документации о доступе к другим документам .

Вероятно, будет проще, если вы не используете подстановочный знак glob в своем правиле и вместо этого вызываете подколлекцию по имени, поэтомуВы можете легче построить путь к родительскому документу, используя отдельные значения подстановочных знаков. Примерно так:

match /scores/{scoreId}/history/{id} {
  allow create, update:
    if get(/databases/$(database)/documents/scores/$(scoreId)).data.userID == request.auth.uid;
}

Это не точное правило, но я надеюсь, что вы можете увидеть, что я здесь делаю, чтобы сформулировать свое собственное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...