как использовать подстановочный знак в корневом вызове в настройке правил базы данных Firebase Realtime - PullRequest
0 голосов
/ 29 октября 2019

Моя база данных выглядит следующим образом

workers: {
    worker1ID: {
        employerId: '-1'
        ownerId: 'asdafnb13214'
        name: Tony
        etc...
    }
},
companies: {
    company1ID: {
        ownerId: 'LPqNASKAN2342as'
        companyName: Good Company
        employeeIDs: {
            worker25Id,
            worker26Id
        }
        etc...
    }
}

Как компания, я пытаюсь добавить сотрудника в свою компанию с помощью workerId. Мои текущие правила записи в рабочую корзину: ...

"rules": {
    "workers": {
      ".read": "auth != null",
      "$worker": {
        ".write": 
            //allow write if authenticated AND
            "auth !== null &&
            //node doesn't exist OR (it exists AND the authenticated user is the worker)
            (!data.exists() || data.child('employerId').val() === auth.uid) || 
            //OR the authenticated user is the company that is trying to add the worker to their company
            (root.child('companies').child('$company').child('ownerId').val() === auth.uid)"
      }
    }
}

Третья строка аутентификации не работает. Я знаю, что это проблема с использованием подстановочного знака $company, потому что когда я жестко закодировал company1ID, я смог отредактировать employerId из worker1ID

Как я могу найти во всех компаниях компанию, чьиownerId === auth.uid. Если это невозможно, в моей функции fetch() у меня есть companyId. Есть ли способ, которым я могу отправить этот companyID через URL, похожий на ?auth=${token}, чтобы я мог просто вставить это в правило.

1 Ответ

0 голосов
/ 29 октября 2019

где определена $ компания? может быть, вы могли бы определить его в рабочем документе, тогда вы могли бы сделать что-то вроде этого

root.child('companies').child(data.child('companyId').val()).child('ownerId').val() === auth.uid

Я не знаю, что будет делать только предоставление $ companyId.

в этомВ этом случае у каждого работника должно быть поле, указывающее на компанию, в которой он работает.

...