Рекурсивные правила Firestore Firebase - PullRequest
0 голосов
/ 29 января 2020

У меня есть 4 коллекции Firestore:

  1. users/{userId}, доступ к которым разрешен только для одного и того же использования - request.auth.uid == userId
  2. organizations/{organizationId}, доступ к которым разрешен пользователям эта организация - exists(/databases/$(database)/documents/organizations/{organizationId}/users/$(request.auth.uid))

Пока что простые правила. В следующих коллекциях есть ссылки либо на пользователя, либо на организацию, а в лучшем случае я бы хотел рассказать firestore: hasAccess(someReference, read).

notifications, у которых есть ref для уведомления, который может быть либо users/{userId}, либо organizations/{organizationId}, к которому я разрешу доступ, если это ссылка на пользователя или на организацию, членом которой является пользователь. (комбинация двух предыдущих правил) accounts с массивом организации ref, и я хотел бы, чтобы правило было таким: resource.data.organizations.any(organization => hasAccess(organizationRef, read))

Вопросы:

  1. Есть ли способ запросить у firebase совпадение с новой ссылкой и вернуть, если у пользователя есть к ней доступ?
  2. Есть ли способ обработать массив, как в моем 4-я коллекция, где я хочу выполнить операцию «any»?

Редактировать:

Это рекурсивно, потому что я хочу, чтобы при сопоставлении коллекции запрашивались другие правила коллекции, который может спросить о другом, et c .. (hasAccess)

Edit 2:

Один из обходных путей - создать функцию canAccess, которую я могу вызывать рекурсивно, так, чтобы для любого пути я могу сделать canAccess(request.path);.

НО "Правила сохранения ошибок - строка 5: рекурсивный вызов не допускается. "

...