Правило Firestore при условии из другой коллекции - PullRequest
0 голосов
/ 31 мая 2018

У меня есть база данных Firestore с двумя коллекциями: пользователи и турниры.Пользователи имеют роль участника и роль администратора и обозначаются логическими значениями isParticipant и isAdmin в пользовательском документе:

/users/{userId}:
  isParticipant: true
  isAdmin: true

У меня установлены правила доступа для этих коллекций, напримерИтак:

service cloud.firestore {
  match /databases/{database}/documents {
     match /users/{userId} {
      allow create, read;
      allow update: if request.auth.uid == userId;
    }
     match /tournaments/{tournamentId} {
      allow create, read, update: if request.auth.uid != null;
    }
  }
}

Однако я действительно хочу ограничить создание турнира пользователем с ролью администратора.Я уже делаю это в коде, но хотел бы, чтобы дополнительная безопасность правила БД не позволяла никому, кроме администратора, создавать турниры.

Есть ли способ ссылаться на элемент данных другой коллекции всинтаксис правил?Что-то вроде:

     match /tournaments/{tournamentId} {
      allow create: if resources.users.userId.isAdmin == true;
    }

?

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

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете получить доступ к данным в другой коллекции, используя функцию get:

 // Allow the user to delete cities if their user document has the
 // 'admin' field set to 'true'
 allow delete: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true

Подробнее об этом см. доступ к другим документам в документации Firebase, откуда я взял приведенный выше пример.

Следует отметить, что для этого требуется прочитать дополнительный документ.Если вы сохраните факт, что пользователь является администратором внутри своего профиля, как пользовательское утверждение, вы можете получить к нему доступ с request.auth без необходимости дополнительного чтения.Например,

allow delete: if request.auth.token.admin == true

Подробнее об этом см. контроль доступа с помощью пользовательских утверждений и доступа к токену пользователя в документации.

...