Я пытаюсь основать правило безопасности на ссылке на другой объект.
У меня есть набор пользователей и набор ролей. Пользовательский объект имеет поле под названием «роль», которое является ссылкой на конкретный документ в коллекции ролей.
users
id
name
role <-- reference to particular role
roles
id
name
isSuperUser
Цель здесь - позволить пользователю с определенной ролью (роль с isSuperUser == true) редактировать любую другую роль или ее подколлекции;
Вот мои правила, которые, как я думал, сработают:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /roles/{roleId=**} {
function isSuperUser() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role.isSuperuser == true;
}
allow read: if request.auth.uid != null;
allow write: if isSuperUser();
}
}
Я подтвердил следующие работы, но на самом деле это не так уж и полезно ...
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role != null;
Если есть лучший способ обеспечить безопасность ролевой базы, я все слышу.
Отсутствие каких-либо инструментов отладки сильно расстраивает.
request.data.refField.data
, но, очевидно, это не поддерживается < / а> - person galki   schedule 20.12.2018