Я пытаюсь написать правила Firestore, которые должны будут получить пользователя из коллекции 'users' в базе данных, а затем получить его / его соответствующий объект Permissions из коллекции 'permissions'.
Воткак выглядит база данных:
В коллекции пользователей у меня есть эта запись:
{
id: 'USER_ID',
permissionsId: 'PERMISSIONS_1'
}
В коллекции разрешений у меня есть эта запись:
{
id: 'PERMISSIONS_1',
content: {
view: true,
create: false,
update: false,
delete: false,
}
}
И этомои правила:
service cloud.firestore {
match /databases/{database}/documents {
function userPermissionsId() {
return get(/databases/$(database)/documents/users/USER_ID).data.permissionsId;
}
function userPermissions(id) {
return get(/databases/$(database)/documents/permissions/$(id)).data;
}
function getPermission(profileId, dataType, action) {
return userPermissions(profileId)[dataType][action];
}
match /{collection}/{document=**} {
// The below code returns true:
// allow read: if userPermissionsId() == 'PERMISSIONS_1'
// The above proves that the function userPermissionsId() is working properly and returning the permissions ID.
// The below code also returns true:
// allow read: if getPermission('PERMISSIONS_1', 'content', 'view');
// The above proves that the function getPermission() is working properly when receiving a correct ID.
// HOWEVER!! Combining the 2 won't work:
allow read: if getPermission(userPermissionsId(), 'content', 'view');
// This will throw the below error in the simulator.
}
}
}
Ошибка при попытке симуляции:
Ошибка при запуске симуляции - Ошибка: строка simulator.rules [9], столбец [15].Функция не найдена ошибка: Имя: [получить] .;Ошибка: указан неверный аргумент для вызова.Функция: [get], Аргумент: ["|| invalid_argument ||"]