Как проверить, существует ли значение в другой коллекции в Firebase / Firestore - PullRequest
0 голосов
/ 27 мая 2020

У меня две коллекции: проекты и спринты. Внутри проектов у меня есть массив участников с объектами. И, используя правила безопасности Firebase, я хочу проверить, существует ли значение внутри одного из этих объектов.

Пример проекта

Project example

Пример спринта

Sprint example

Я хочу, чтобы при обновлении или создании спринта пользователем я хотите проверить, совпадает ли вошедший в систему пользователь (request.auth.uid) с одним из идентификаторов пользователей внутри массива members проекта. Но я просто не могу понять, как это сделать. sh это.

Это то, что у меня сейчас есть, что явно не работает.

match /sprints/{document} {
    allow read: if request.auth.uid != null
    allow update, create: if get(/databases/$(database)/documents/projects/$(resource.data.project)).data.members == request.auth.uid
}
* 1026 сделай это?

Заранее спасибо

1 Ответ

2 голосов
/ 27 мая 2020

Вы не сможете сделать это с этой структурой данных: вам нужно oop через члены, и вы не можете сделать это в правилах.

Но что будет работать, так это использовать карту вместо массива с uid в качестве ключа.

{ 
  archived: false
  id: "asdasd"
  members: {
    firstuid: { name: "Bob", role: "Prog"}
    seconduid: { name: "Alice", role": "PM"}
  }
}

Тогда следующие правила будут работать:

match /sprints/{document} {
    allow read: if request.auth.uid != null
    allow update, create: if get(/databases/$(database)/documents/projects/$(resource.data.project)).data.members.get(request.auth.uid, null) != null 
}
...