Правила безопасности Firebase как подстановить все пути, кроме указанных - PullRequest
0 голосов
/ 27 февраля 2020

Давайте представим набор правил, имеющих следующие поля:

service cloud.firestore {
   match /databases/{database}/documents {
     match /stories/{story} {}
     match /comments/{comment} {}
     match /posts/{post} {}
  }
} 

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

Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Я считаю, что это невозможно. Если вы используете подстановочный знак в совпадении для такой коллекции:

match /{collection}/{doc} { ... }

, тогда он будет соответствовать всем документам во всех коллекциях, включая истории, комментарии и публикации. Это, конечно, не то, что вы хотите. Не существует способа сопоставления подстроки или регулярных выражений с подстановочным знаком. Он всегда применяется ко всей коллекции или идентификатору документа в пути.

0 голосов
/ 27 февраля 2020

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

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in collection and subcollections
    match /{path=**} {
      allow read, write: if <condition>;
    }
  }
}

Более подробную информацию вы можете найти здесь: https://firebase.google.com/docs/firestore/security/rules-structure#recursive_wildcards

...