Невозможно вызвать ваш сторонний сервер авторизации из правил безопасности Firestore, так как его производительность будет непредсказуемой.
Вместо этого вы можете сделать информацию со стороннего сервера авторизации доступной в правилах безопасности вашего Firestore.Для этого есть два общих подхода:
- Сделать информацию доступной в качестве пользовательских утверждений в профиле аутентификации пользователя.
- Сделать информацию доступной внутри самого Firestore.
Любая из этих задач должна выполняться из доверенного кода, поэтому она должна выполняться в доверенной среде, такой как компьютер разработчика,сервер, которым вы управляете, или Облачные функции.
Обычно вы помещаете информацию в пользовательскую заявку, если она мала и вряд ли будет часто изменяться (поскольку для распространения пользовательской заявки может потребоваться некоторое время).Например: то, является ли пользователь администратором, обычно является одноразовым изменением и хорошо вписывается в пользовательскую заявку.Затем вы можете получить доступ к настраиваемым утверждениям в своих правилах безопасности с помощью чего-то вроде:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.token.admin == true;
}
}
}
Если информация об авторизации больше или более изменчива, ее чаще хранят в самой базе данных.Затем вы можете получить к нему доступ в своих правилах безопасности с помощью чего-то вроде:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if exists(/databases/$(database)/documents/AuthorizedUsers/$(request.auth.id))
}
}
}