Я работаю над своим первым большим огненным штормом. Это по сути мультитенантное приложение, в котором мы имеем структуру коллекции, такую как:
- счета /
- Счета / {ACCOUNTID} / otherCollections
Документ учетной записи выглядит примерно так:
{
"name": "ACME Inc",
"primaryUserID": "2wUMSpffuQgcFDWWI9uHm9RY642",
"users": {
"2wUMSpffuQgcFDWWI9uHm9RY642": {
"admin": true,
"user": true
}
}
}
Я хочу защитить список учетных записей, чтобы показывать только те учетные записи, которые пользователь имеет право просматривать. Я также хочу обезопасить вложенные коллекции. До сих пор я построил следующие правила:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
match /accounts/{account}{
function signedIn() {
return request.auth.uid != null;
}
function SignedInAndBelongsToAccount() {
return signedIn() && getUser() != null;
}
function getRole(roleName){
return getUser()[roleName] == true;
}
function getUser() {
return get(/databases/$(database)/documents/accounts/$(account.uid)).data.users[request.auth.uid];
}
allow read: if getRole('user')
allow write: if getRole('admin');
}
}
}
Но в моем списке отображаются все учетные записи, и я еще не разобрался с подколлекциями. Что мне не хватает? Разве это не фильтрует строки, вместо этого мне нужно будет отфильтровать его по запросу приложения? Или я должен структурировать это совершенно иначе?