Правила безопасности Flireter Firestore на основе ролей - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь определить, является ли указанное поле role в коллекции моего пользователя тем, которое используется в приложении. Я смоделировал это правило, как показано на изображении ниже в разделе правил: enter image description here

Я пытаюсь получить доступ к полю Admin пользовательской коллекции на этом изображении и проверить в правилах разрешить создание нового продукта, если пользователь является администратором или суперпользователем (может создавать пользователей с правами администратора). Изображение ниже:

enter image description here

Кажется, что имитация правила не удалась, есть ли правильный способ доступа к этому полю в правилах безопасности (см. Оба изображения) или правильно настроить базу данных? Поля были заданы в форме с помощью переключателей?

В целом желаемая задача состоит в том, чтобы разрешить доступ к моим пользователям и / или манипулировать ими только в определенных разделах базы данных приложения, а также в самом приложении. способ запроса этих полей и условного рендеринга пользовательского интерфейса и взаимодействий, чтобы избежать всего правила безопасности?

Суперпользователь находится в коллекции владельца, опущен для краткости и содержит только один документ.

Спасибо.

1 Ответ

1 голос
/ 07 февраля 2020

Ваше правило заключается в проверке документов в вашей коллекции "проектов", но на вашем снимке экрана показано содержание документов в коллекции "пользователей". Таким образом, здесь явно имеется несоответствие.

Если вы хотите разрешить доступ к документу, используя содержимое другого документа, вам нужно будет get () другой документ, затем проверьте это для данных, которые вы ищете. Пример этого приведен в документации . Вам нужно будет get() документ пользователя для аутентифицированного пользователя, а затем проверить поле роли этого документа. Это будет выглядеть примерно так:

get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role
...