Я пытаюсь настроить правила безопасности для своего экземпляра Firestore, у меня есть три основных требования:
- Пользователь должен аутентифицироваться для чтения
- Владельцы документов - единственные, ктоможет написать им (используйте поле с именем владельца в документе для проверки)
- Любой пользователь-администратор также может написать в любой документ
Приведенный ниже код выполняет все это (исключая проверкудля владельца), но функция get для определения роли пользователей работает только в том случае, если она указана в той же строке, что и условие if.В приведенном ниже коде обновление и удаление работает для администратора, но не для создания.
Может кто-нибудь сказать, почему функция isAdmin () не дает такой же результат?
service cloud.firestore {
match /databases/{database}/documents {
// Only 'owners' of data can make changes to data
match /posts/{post} {
allow read: if isAuthenticated();
allow create: if isAuthenticated() && isAdmin();
allow update, delete: if isAuthenticated() && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 1;
}
}
/// FUNCTIONS ///
function isAuthenticated() {
return request.auth.uid != null;
}
// function requestIsOwner() {
// return request.resource.data.owner == request.auth.uid;
// }
// function resourceIsOwner() {
// return resource.data.owner == request.auth.uid;
// }
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == 1
}
}