Правила безопасности Firestore - подстановочные знаки Имена коллекций? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть набор коллекций, имена которых начинаются с ABC, и я хочу написать одно правило, которое будет применяться ко всем из них независимо от того, что следует за ABC.Что-то вроде:

match /ABC*/{anyid} {
  allow read, write;
}

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

GET /ABC123/456

Есть идеи?

1 Ответ

0 голосов
/ 18 декабря 2018

Насколько я знаю, в настоящее время невозможно сопоставить имя частично коллекции (или документа).Хотя это звучит как интересный запрос о функции, поэтому я рекомендую подать запрос о функции .

. Между тем, единственное, о чем я могу думать, - это сопоставить все коллекции, а затем протестировать путь.через resource['__name__']:

match /53829635/{document} {
  match /{col}/{doc} {
    allow read: if resource['__name__'][5].matches('ABC.*')
  }
}

Выражение resource['__name__'] возвращает Path, который может быть индексом в виде массива для получения сегментов пути.Он имеет форму /databases/(default)/documents/collection/document, поэтому подколлекция имеет индекс 5. Поскольку это просто строка, мы можем использовать matches для нее.В этом случае я разрешаю чтение из любого подколлекции, чье имя начинается с ABC.


Обновление: получается, что вы также можете просто получить доступ к подстановочному знаку col вместо того, чтобы смотреть вверх по пути,Так что это будет работать так же:

allow read: if col.matches('ABC.*')
...